Parastoo Ebrahimi
4 سال پیش توسط Parastoo Ebrahimi مطرح شد
4 پاسخ

ارسال اطلاعات فقط در صورتی که آپدیت شده باشن

سلام. من یه فرمی دارم و میخوام دکمه send اول فعال باشه. بعد که کاربر اطلاعات رو ارسال کرد غیر فعال بشه و در صورتی فعال بشه که حداقل یکی از اطلاعاتشو تغییر داده باشه. چه باید بکنم برای این کار. اطلاعات با زدن دکمه ارسال generate میشن به صورت زیر :
@kamran.davar
@hesammousavi
@sinashahoveisi

 const handleGenerateCampaign = () => {
        setLoading(true);
        let stores = props.stores.concat(props.zoneCheck);
        let toJS = {
            parameters: [
                { key: 'storeIDs', value: stores ? stores.join(',') : '' },
                { key: 'periodDescription', value: props.periodDescription },
                { key: 'dayOfWeek', value: 1 },
                { key: 'startDate', value: props.startDate },
                { key: 'endDate', value: props.endDate },
                { key: 'dateRangeDescription', value: props.dateRangeDescription },
                { key: 'departmentCode', value: props.departmentCode },
                { key: 'spentAmount', value: props.spentAmount },
                { key: 'frequencyType', value: props.frequencyType },
                { key: 'frequencyPeriod', value: props.frequencyPeriod },
                { key: 'enforcePartPeriod', value: props.enforcePartPeriod },
                { key: 'sortOrder', value: props.sortOrder },
                { key: 'orderBy', value: props.orderBy },
            ],
        }
        axios.post(`${window.REACT_APP_CONFIG.REACT_APP_EMC_URL}api/campaign/report/${props.handleReportTemplate()}`, toJS.parameters).then((response) => {
            console.log("generaate campaign result", response.data);
            setCampaignIdentifier(response.data);
            setLoading(false);
        });
    }

ثبت پرسش جدید
کامران داور
تخصص : Front-end developer
@kamran.davar 4 سال پیش مطرح شد
0

قاعدتا باید اطلاعات فعلی فرم رو با اطلاعاتی که از بک اند گرفته شده مقایسه کنید و در صورتی که جواب مقایسه false بود دکمه فعال بشه و برعکس.


Parastoo Ebrahimi
تخصص : front-end developer
@parastooebrahimi 4 سال پیش آپدیت شد
0

@kamran.davar
هیچ اطلاعاتی از بک اند دریافت نمیشه. چون قبل از ارسال و گرفتن ریسپانس میخوام چک بشه . فقط باید این آرایه ای که ساخته میشه رو چک کنم اگه تغییری داشت ارسال بشه. چجوری یه آرایه رو چک بکنیم که تغییری کرده یا نه


Mohammad reza Golshahi
تخصص : Go - Python
@golshahimohammadreza 4 سال پیش مطرح شد
1

با سلام دوست عزیز
@parastooebrahimi

برای بررسی این موضوع باید از متد watch استفاده کنی یک نمونه به طول مثال :

 var vm = new Vue({
            data: {
                a: 1,
                b: 2,
                c: 3,
                d: 4,
                e: {
                    f: {
                        g: 5
                    }
                }
            },
            watch: {
                a: {
                    handler: function (val, oldVal) { /* ... */ },
                    deep: true
                },

                d: {
                    handler: 'someMethod',
                    immediate: true
                },

                'e.f': function (val, oldVal) { /* ... */ }

            }
        });

Parastoo Ebrahimi
تخصص : front-end developer
@parastooebrahimi 4 سال پیش مطرح شد
1

@golshahimohammadreza
ممنونم از کمکتون. حلش کردم ولی نه با watch که گقتین. هر بار که برای آخرین بار آرایه تغییر میکنه اون رو توی یه متغیر توی استیت ذخیره کردم و اون رو و مقدار جدید رو به Json.stringift تبدیل کردم و بعد مقایسشون میکنم که اگر مثل هم بودن دکمه ارسال رو غیر فعال میکنم. به صورت زیر:

const GenerateCampaign = (props) => {
    const [campaignIdentifier, setCampaignIdentifier] = useState(null);
    const [loading, setLoading] = useState(false);
    const [baseJS, setBaseJS] = useState([]);
    const handleGenerateCampaign = () => {
        setLoading(true);
        axios.post(`${window.REACT_APP_CONFIG.REACT_APP_EMC_URL}api/campaign/report/${props.handleReportTemplate()}`, props.toJS).then((response) => {
            console.log("generaate campaign result", response.data);
            setCampaignIdentifier(response.data);
            setLoading(false);
        });
        setBaseJS(props.toJS);
    }
    return (
        <React.Fragment>
            <div className="pt-5">
                <button 
                disabled={JSON.stringify(baseJS)=== JSON.stringify(props.toJS) ? true : false} 
                onClick={() => handleGenerateCampaign()} className="btn btn-lg btn-info btn-block"><i className={loading ? "fa fa-sync fa-spin" : "fas fa-calendar-alt"} ></i> Create Campaign</button>
                {
                    campaignIdentifier !== null ?
                        <button 
                        onClick={() => {
                            window.open(`${window.REACT_APP_CONFIG.REACT_APP_EMC_URL}#campaigns/campaign/${campaignIdentifier}`)
                        }} className="btn btn-outline-info btn-block"><i className="fa fa-link"></i> Campaign</button>
                        : null
                }
            </div>
        </React.Fragment>
    )

};

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام