import { computed, defineComponent, onBeforeUpdate, onUnmounted, type PropType, reactive, ref, } from 'vue'; import { DefaultComponentProps } from '../_default'; import { BCMSPropWrapper, BCMSPropWrapperArray, BCMSPropWrapperArrayItem, } from './_wrapper'; import { BCMSColorPickerInput } from '../input'; import type { BCMSArrayPropMoveEventData, BCMSPropValueExtended, BCMSPropValueExtendedColorPicker, } from '../../types'; import { useTranslation } from '../../translations'; type PropValueType = BCMSPropValueExtendedColorPicker; const component = defineComponent({ props: { ...DefaultComponentProps, prop: { type: Object as PropType, required: true, }, lng: { type: String, default: 'en', }, basePropPath: String, }, emits: { update: (_value: string, _propPath: string) => { return true; }, add: (_propPath: string) => { return true; }, move: (_propPath: string, _moveData: BCMSArrayPropMoveEventData) => { return true; }, remove: (_propPath: string) => { return true; }, }, setup(props, ctx) { const translations = computed(() => { return useTranslation(); }); props = reactive(props); const propData = computed(() => { return props.prop.data as PropValueType; }); const errors = ref(propData.value.value.map(() => '')); const unregisterFromChecker = window.bcms.prop.checker.register(() => { let isOk = true; if (props.prop.required) { if (props.prop.array && propData.value.value.length === 0) { errors.value[0] = translations.value.prop.input.error.emptyArray; isOk = false; } else { if (propData.value.value.length === 0) { errors.value[0] = translations.value.prop.colorPicker.error.selectColor; isOk = false; } else { for (let i = 0; i < propData.value.value.length; i++) { if (!propData.value.value[i]) { errors.value[i] = translations.value.prop.colorPicker.error.selectColor; isOk = false; } else { errors.value[i] = ''; } } } } } return isOk; }); onBeforeUpdate(() => { const value = propData.value.value; if (value.length !== errors.value.length) { errors.value = value.map(() => ''); } }); onUnmounted(() => { unregisterFromChecker(); }); return () => (
{props.prop.array ? ( { // const prop = window.bcms.util.object.instance(props.prop); // (prop.data as PropValueType).push(''); ctx.emit('add', props.basePropPath + '.data'); }} > {propData.value.value.map((_, valueIndex) => { return ( { ctx.emit('move', props.basePropPath + '.data', data); }} onRemove={(index) => { ctx.emit('remove', props.basePropPath + '.data.' + index); }} > { ctx.emit( 'update', inputValue, props.basePropPath + '.data.' + valueIndex ); }} /> ); })} ) : ( <> { ctx.emit( 'update', inputValue, props.basePropPath + '.data.0' ); }} /> )}
); }, }); export default component;