سلام. من یه فرمی دارم و میخوام دکمه 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);
});
}
قاعدتا باید اطلاعات فعلی فرم رو با اطلاعاتی که از بک اند گرفته شده مقایسه کنید و در صورتی که جواب مقایسه false بود دکمه فعال بشه و برعکس.
@kamran.davar
هیچ اطلاعاتی از بک اند دریافت نمیشه. چون قبل از ارسال و گرفتن ریسپانس میخوام چک بشه . فقط باید این آرایه ای که ساخته میشه رو چک کنم اگه تغییری داشت ارسال بشه. چجوری یه آرایه رو چک بکنیم که تغییری کرده یا نه
با سلام دوست عزیز
@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) { /* ... */ }
}
});
@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>
)
};
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟