{"version":3,"file":"index-CI2v1Jxk.js","sources":["../../../app/frontend/vue/src/components-tw/shared/s-save-panel/composables/use-save.js","../../../app/frontend/vue/src/components-tw/shared/s-save-panel/components/save-basic.vue","../../../app/frontend/vue/src/components-tw/shared/s-save-panel/index.vue"],"sourcesContent":["import {\n ref, watch, computed,\n} from 'vue';\n\n// свойства кнопки\nconst SUCCESS_DELAY = 1800;\nconst BUTTON_STATES = [\n {\n name: 'save',\n text: 'Сохранить изменения',\n icon: null,\n },\n {\n name: 'success',\n text: 'Сохранено',\n icon: 'check-circle-white.svg',\n },\n];\n\nexport function useSave(props, emit) {\n const stayOpen = ref(false);\n\n // eslint-disable-next-line no-underscore-dangle\n const _btnState = ref(0);\n\n // состояние кнопки\n const btnState = computed({\n get() {\n return _btnState.value;\n },\n set(value) {\n // если меняется состояние, то устанавливаем loading и stayOpen в зависимости от состояния\n switch (value) {\n case 1:\n stayOpen.value = true;\n _btnState.value = value;\n break;\n default:\n stayOpen.value = false;\n setTimeout(() => {\n _btnState.value = value;\n }, 205); // задержка для анимации, чтобы не было мигания текста\n break;\n }\n },\n });\n // состояния кнопки\n const buttonText = computed(() => BUTTON_STATES[btnState.value].text);\n const buttonIcon = computed(() => BUTTON_STATES[btnState.value].icon);\n const isDisabled = computed(() => btnState.value !== 0);\n\n async function startSaving() {\n if (btnState.value !== 0) return;\n\n try {\n stayOpen.value = true;\n await emit('save');\n } catch (e) {\n btnState.value = 0;\n }\n }\n\n function clearState() {\n btnState.value = 1;\n\n // через время сбрасываем состояние\n setTimeout(() => {\n btnState.value = 0;\n emit('set-finished');\n }, SUCCESS_DELAY);\n }\n\n // если пришла ошибка\n watch(() => props.isError, (value) => {\n if (value) {\n btnState.value = 0;\n }\n });\n\n watch([() => props.isLoading, () => props.isSuccess], ([newLoading, newSuccess], [oldLoading, oldSuccess]) => {\n if (!props.isError) {\n if (!newLoading && oldLoading || newSuccess && !oldSuccess) {\n clearState();\n }\n }\n\n if (props.isError) {\n stayOpen.value = false;\n }\n });\n\n return {\n startSaving,\n clearState,\n btnState,\n stayOpen,\n buttonText,\n buttonIcon,\n isDisabled,\n };\n}\n","\n\n","\n\n"],"names":["BUTTON_STATES","name","text","icon","emit","__emit","props","__props","startSaving","buttonText","buttonIcon","btnState","stayOpen","ref","_btnState","computed","get","value","set","setTimeout","isDisabled","clearState","watch","isError","isLoading","isSuccess","newLoading","newSuccess","oldLoading","oldSuccess","async","e","useSave","__expose","slots","useSlots","saveBasic","staySetOpen","v"],"mappings":"iNAKA,MACMA,EAAgB,CACpB,CACEC,KAAM,OACNC,KAAM,sBACNC,KAAM,MAER,CACEF,KAAM,UACNC,KAAM,YACNC,KAAM,qTCaV,MAAMC,EAAOC,EAEPC,EAAQC,GAuBRC,YACJA,EAAAC,WACAA,EAAAC,WACAA,EAAAC,SACAA,EAAAC,SACAA,GDvCK,SAAiBN,EAAOF,GACvB,MAAAQ,EAAWC,GAAI,GAGfC,EAAYD,EAAI,GAGhBF,EAAWI,EAAS,CACxBC,IAAM,IACGF,EAAUG,MAEnB,GAAAC,CAAID,GAGK,IADCA,GAEJL,EAASK,OAAQ,EACjBH,EAAUG,MAAQA,IAGlBL,EAASK,OAAQ,EACjBE,YAAW,KACTL,EAAUG,MAAQA,CAAA,GACjB,KAGR,IAGGR,EAAaM,GAAS,IAAMf,EAAcW,EAASM,OAAOf,OAC1DQ,EAAaK,GAAS,IAAMf,EAAcW,EAASM,OAAOd,OAC1DiB,EAAaL,GAAS,IAAyB,IAAnBJ,EAASM,QAa3C,SAASI,IACPV,EAASM,MAAQ,EAGjBE,YAAW,KACTR,EAASM,MAAQ,EACjBb,EAAK,eAAc,GA/DH,KAiEnB,CAqBM,OAlBPkB,GAAM,IAAMhB,EAAMiB,UAAUN,IACtBA,IACFN,EAASM,MAAQ,EAClB,IAGHK,EAAM,CAAC,IAAMhB,EAAMkB,UAAW,IAAMlB,EAAMmB,YAAY,EAAEC,EAAYC,IAAcC,EAAYC,MACvFvB,EAAMiB,WACJG,GAAcE,GAAcD,IAAeE,QAK9CvB,EAAMiB,UACRX,EAASK,OAAQ,EAClB,IAGI,CACLT,YAzCFsB,iBACM,GAAmB,IAAnBnB,EAASM,MAET,IACFL,EAASK,OAAQ,QACXb,EAAK,OACZ,OAAQ2B,GACPpB,EAASM,MAAQ,CAClB,CACF,EAiCCI,aACAV,WACAC,WACAH,aACAC,aACAU,aAEJ,CCzCIY,CAAQ1B,EAAOF,UAEbkB,EAAAV,GAAWK,IACfb,EAAK,gBAAiBa,EAAK,IAGhBgB,EAAA,CACXzB,o6BChBF,MAAMJ,EAAOC,EACP6B,EAAQC,IACRvB,EAAWC,GAAI,GAEfP,EAAQC,EAuBR6B,EAAYvB,EAAI,MAEtB,SAASwB,EAAYC,GACnB1B,EAASK,MAAQqB,CACnB,QAOaL,EAAA,CACXzB,YANF,WACE4B,EAAUnB,MAAMT,aAClB"}