@nhtio/lucid-resourceful-vue-components 0.1.0-master-0d659775 → 0.1.0-master-2b799e79
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/{boolean-J55jiDD7.mjs → boolean-BTu-4Ihs.mjs} +2 -2
- package/{boolean-J55jiDD7.mjs.map → boolean-BTu-4Ihs.mjs.map} +1 -1
- package/components/exporter.mjs +1 -1
- package/components/fields/boolean.mjs +1 -1
- package/components/fields.mjs +1 -1
- package/components/resourceful_index.mjs +1 -1
- package/components/resourceful_record.mjs +1 -1
- package/components/resourceful_record_default_form.mjs +1 -1
- package/components.mjs +4 -4
- package/helpers.mjs +1 -1
- package/{index-DcCK7tW-.mjs → index-Cb3Fmo7E.mjs} +3 -3
- package/{index-DcCK7tW-.mjs.map → index-Cb3Fmo7E.mjs.map} +1 -1
- package/{index-DGWcBN5e.mjs → index-CdaTAyzs.mjs} +2 -2
- package/{index-DGWcBN5e.mjs.map → index-CdaTAyzs.mjs.map} +1 -1
- package/index.mjs +5 -5
- package/package.json +25 -25
- package/{renderers-bwWUs06k.mjs → renderers-DLsO8zG-.mjs} +2 -2
- package/{renderers-bwWUs06k.mjs.map → renderers-DLsO8zG-.mjs.map} +1 -1
|
@@ -9,7 +9,7 @@ import { C as ControlButtonBar } from "./index-BcDX9w4T.mjs";
|
|
|
9
9
|
import { e as errorSvg } from "./question-CpfZrjl2.mjs";
|
|
10
10
|
import { u as useRender } from "./vendor-nhtio-vuetifiable-CS-KbH1h.mjs";
|
|
11
11
|
import { u as useHttpElements, e as extractErrorCode } from "./http-ChBUYgv8.mjs";
|
|
12
|
-
import { r as renderDefaultResourcefulRecordForm } from "./renderers-
|
|
12
|
+
import { r as renderDefaultResourcefulRecordForm } from "./renderers-DLsO8zG-.mjs";
|
|
13
13
|
import { s as stripUndefinedValuesFromObject } from "./utils-DehfJ8pT.mjs";
|
|
14
14
|
import { v as validator, d as decode } from "./vendor-nhtio-validation-IJWW0vrt.mjs";
|
|
15
15
|
import { ResourcefulRecordScopedDisplaySymbol, ResourcefulRecordScopedBusConsumerSymbol } from "./symbols.mjs";
|
|
@@ -795,4 +795,4 @@ const ResourcefulRecord = defineComponent({
|
|
|
795
795
|
export {
|
|
796
796
|
ResourcefulRecord as R
|
|
797
797
|
};
|
|
798
|
-
//# sourceMappingURL=index-
|
|
798
|
+
//# sourceMappingURL=index-CdaTAyzs.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-DGWcBN5e.mjs","sources":["../src/private/resourceful-record/index.ts"],"sourcesContent":["import * as qs from 'qs-esm'\nimport { useDefaults } from 'vuetify'\nimport { useAlert } from '../ux/alert'\nimport { useI18n, useHttp } from '../ioc'\nimport { default as numeral } from 'numeral'\nimport { printf as format } from 'fast-printf'\nimport { VImg } from 'vuetify/components/VImg'\nimport { ResourcefulRecordForm } from './form'\nimport { useScopedDisplay } from '../ux/display'\nimport { VCard } from 'vuetify/components/VCard'\nimport { ControlButtonBar } from '../control-button-bar'\nimport { VEmptyState } from 'vuetify/components/VEmptyState'\nimport { default as errorSvg } from '../icons/error.svg?url'\nimport { useRender } from '@nhtio/vuetifiable/util/useRender'\nimport { useHttpElements, extractErrorCode } from '../ux/http'\nimport { renderDefaultResourcefulRecordForm } from './renderers'\nimport { stripUndefinedValuesFromObject } from '../common/utils'\nimport { VContainer, VRow, VCol } from 'vuetify/components/VGrid'\nimport { VProgressLinear } from 'vuetify/components/VProgressLinear'\nimport { VProgressCircular } from 'vuetify/components/VProgressCircular'\nimport { validator as joi, decode as decodeJoi } from '@nhtio/validation'\nimport { makeResourcefulRecordProps, resourcefulRecordEmits } from './props'\nimport { ResourcefulRecordBusEmitter, isResourcefulRecordBusConsumer } from './types'\nimport {\n ResourcefulRecordScopedDisplaySymbol,\n ResourcefulRecordScopedBusConsumerSymbol,\n} from '../symbols'\nimport {\n defineComponent,\n h,\n toRefs,\n computed,\n ref,\n watch,\n warn,\n shallowRef,\n provide,\n triggerRef,\n nextTick,\n mergeProps,\n} from 'vue'\nimport {\n useControlBarBaseBindings,\n useControlBarButtonBindings,\n useAdditionalActionButtonBindings,\n useCrudActionButtonBindings,\n useControlButtonBaseBindings,\n useResourcefulRecordFloatingControls,\n useResourcefulPassthroughHook,\n} from './utils'\nimport type { FireAlertFn } from '../ux/alert'\nimport type { ComponentPublicInstance } from 'vue'\nimport type { ValidationProps } from '../ux/validation'\nimport type { REnumFieldLoadedChoice } from '../fields/enum'\nimport type { ControlButtonBarProps } from '../control-button-bar/props'\nimport type { Schema, ObjectSchema, ValidationError } from '@nhtio/validation'\nimport type { ResourcefulRecordVCardProps, BaseResourcefulRecordProps } from './props'\nimport type { ResourcefulHttpProgress, ResourcefulHttpResponse } from '../services/http'\nimport type {\n ResourcefulRecordModelSchema,\n ResourceResourcefulRecordResponse,\n ResourcefulRecordComponentSlots,\n ResourcefulSubmissionHandler,\n ResourcefulRecordFormDefaultSlotArgs,\n} from './types'\n\nexport const ResourcefulRecord = defineComponent({\n name: 'ResourcefulRecord',\n props: makeResourcefulRecordProps(),\n emits: resourcefulRecordEmits,\n slots: Object as ResourcefulRecordComponentSlots,\n setup(props, { slots, emit, attrs }) {\n const t = useI18n()\n const http = useHttp()\n const containerVCardRef = ref<VCard | null>(null)\n const scopedDisplay = useScopedDisplay(containerVCardRef)\n provide(ResourcefulRecordScopedDisplaySymbol, scopedDisplay)\n const bus = new ResourcefulRecordBusEmitter()\n const consumer = bus.spawn()\n\n const doFormSubmit = (...args: Parameters<ValidationProps['doFormSubmit']>) => {\n bus.emit('doFormSubmit', ...args)\n }\n const doResetForm = (...args: Parameters<ValidationProps['doResetForm']>) => {\n bus.emit('doResetForm', ...args)\n }\n const setFieldValue = (...args: Parameters<ValidationProps['setFieldValue']>) => {\n bus.emit('setFieldValue', ...args)\n }\n const setValues = (...args: Parameters<ValidationProps['setValues']>) => {\n bus.emit('setValues', ...args)\n }\n const setFieldTouched = (...args: Parameters<ValidationProps['setFieldTouched']>) => {\n bus.emit('setFieldTouched', ...args)\n }\n const setTouched = (...args: Parameters<ValidationProps['setTouched']>) => {\n bus.emit('setTouched', ...args)\n }\n const validate = (...args: Parameters<ValidationProps['validate']>) => {\n bus.emit('validate', ...args)\n }\n const validateField = (...args: Parameters<ValidationProps['validateField']>) => {\n bus.emit('validateField', ...args)\n }\n const forceUpdateSchema = (...args: Parameters<ValidationProps['forceUpdateSchema']>) => {\n bus.emit('forceUpdateSchema', ...args)\n }\n const forceUpdateInitialValues = (\n ...args: Parameters<ValidationProps['forceUpdateInitialValues']>\n ) => {\n bus.emit('forceUpdateInitialValues', ...args)\n }\n provide(ResourcefulRecordScopedBusConsumerSymbol, consumer)\n const {\n baseUrl,\n metaProgressColor,\n uid,\n container,\n controlButtonOptions,\n controlButtonBarOptions,\n routeToIndex,\n callbackToIndex,\n indexButtonOverrides,\n canIndex,\n routeToCreate,\n callbackToCreate,\n createButtonOverrides,\n canCreate,\n routeToRead,\n callbackToRead,\n readButtonOverrides,\n canRead,\n routeToUpdate,\n callbackToUpdate,\n updateButtonOverrides,\n canUpdate,\n routeToDelete,\n callbackToDelete,\n deleteButtonOverrides,\n canDelete,\n additionalControlBarButtons,\n actions,\n state,\n mode,\n initialValues,\n additionalMessages,\n overrideMessages,\n callOnPrevented,\n callOnSubmitted,\n callOnSuccess,\n callOnFailure,\n callOnException,\n callOnSubmittingStateChange,\n callOnValidatingStateChange,\n callOnTouchedStateChange,\n callOnDirtyStateChange,\n callOnValidStateChange,\n callOnPendingStateChange,\n callOnErrorsStateChange,\n callOnErrorBagStateChange,\n callOnSubmitCountStateChange,\n fieldLabels,\n advanced,\n specificFieldOptions,\n commitButtonOverrides,\n resetButtonOverrides,\n refreshButtonOverrides,\n bus: commandBus,\n fireAlertFn,\n } = toRefs(props)\n const defaultCommonFieldOptions = useDefaults(\n props.commonFieldOptions,\n 'ResourcefulRecordFormField'\n )\n const commonFieldOptions = computed(() => ({\n ...defaultCommonFieldOptions,\n density: scopedDisplay.xs\n ? ('compact' as const)\n : scopedDisplay.lgAndUp\n ? ('default' as const)\n : ('comfortable' as const),\n }))\n const normalizedBaseUrl = computed(() => {\n let url = baseUrl.value || ''\n if (url.endsWith('/')) {\n url = url.slice(0, -1)\n }\n return url\n })\n const metaEndpoint = computed(() => ('create' === mode.value ? '$meta.create' : '$meta.update'))\n const { renderDialogs, fire: doFire } = useAlert(containerVCardRef, true, true)\n const fire: FireAlertFn = (...args) =>\n fireAlertFn.value ? fireAlertFn.value(...args) : doFire(...args)\n const onPrevented = useResourcefulPassthroughHook<'prevented'>(\n 'prevented',\n 'callOnPrevented',\n emit,\n props,\n attrs,\n {\n fallback: (values: Record<string, any>, error: ValidationError) => {\n // show a dialog\n warn('Prevented submission with values:', values, 'and error:', error)\n fire({\n icon: 'error',\n title: t('resourcefulRecord.alerts.prevented.title'),\n text: t('resourcefulRecord.alerts.prevented.text'),\n })\n },\n }\n )\n const onSubmitted = useResourcefulPassthroughHook<'submitted'>(\n 'submitted',\n 'callOnSubmitted',\n emit,\n props,\n attrs,\n {}\n )\n const onSuccess = useResourcefulPassthroughHook<'success'>(\n 'success',\n 'callOnSuccess',\n emit,\n props,\n attrs,\n {\n fallback: async (response, values) => {\n console.debug('Form committed with values:', response, values)\n await fire({\n icon: 'success',\n title: t('resourcefulRecord.alerts.success.title'),\n text: t('resourcefulRecord.alerts.success.text'),\n })\n if ('create' === mode.value) {\n // clear the form for a new entry\n doResetForm()\n }\n },\n }\n )\n const onFailure = useResourcefulPassthroughHook<'failure'>(\n 'failure',\n 'callOnFailure',\n emit,\n props,\n attrs,\n {\n fallback: (response, values) => {\n console.debug('Form failed to commit with values:', response, values)\n // TODO: parse the response and try to give a bit more\n // context based on the response. For example, if it's a standard\n // resourceful response, we can use the error code, message and details\n // to provide better feedback.\n fire({\n icon: 'error',\n title: t('resourcefulRecord.alerts.failure.title'),\n text: t('resourcefulRecord.alerts.failure.text'),\n })\n },\n }\n )\n const onException = useResourcefulPassthroughHook<'exception'>(\n 'exception',\n 'callOnException',\n emit,\n props,\n attrs,\n {\n immediate: true,\n fallback: (exception: unknown) => {\n warn('Form submission exception:', exception)\n fire({\n icon: 'error',\n title: t('resourcefulRecord.alerts.exception.title'),\n text: t('resourcefulRecord.alerts.exception.text'),\n })\n },\n }\n )\n const onSubmittingStateChange = useResourcefulPassthroughHook<'state:submitting'>(\n 'state:submitting',\n 'callOnSubmittingStateChange',\n emit,\n props,\n attrs,\n {}\n )\n const onValidatingStateChange = useResourcefulPassthroughHook<'state:validating'>(\n 'state:validating',\n 'callOnValidatingStateChange',\n emit,\n props,\n attrs,\n {}\n )\n const onTouchedStateChange = useResourcefulPassthroughHook<'state:touched'>(\n 'state:touched',\n 'callOnTouchedStateChange',\n emit,\n props,\n attrs,\n {}\n )\n const onDirtyStateChange = useResourcefulPassthroughHook<'state:dirty'>(\n 'state:dirty',\n 'callOnDirtyStateChange',\n emit,\n props,\n attrs,\n {}\n )\n const onValidStateChange = useResourcefulPassthroughHook<'state:valid'>(\n 'state:valid',\n 'callOnValidStateChange',\n emit,\n props,\n attrs,\n {}\n )\n const onPendingStateChange = useResourcefulPassthroughHook<'state:pending'>(\n 'state:pending',\n 'callOnPendingStateChange',\n emit,\n props,\n attrs,\n {}\n )\n const onErrorsStateChange = useResourcefulPassthroughHook<'state:errors'>(\n 'state:errors',\n 'callOnErrorsStateChange',\n emit,\n props,\n attrs,\n {}\n )\n const onErrorBagStateChange = useResourcefulPassthroughHook<'state:errorBag'>(\n 'state:errorBag',\n 'callOnErrorBagStateChange',\n emit,\n props,\n attrs,\n {}\n )\n const onSubmitCountStateChange = useResourcefulPassthroughHook<'state:submitCount'>(\n 'state:submitCount',\n 'callOnSubmitCountStateChange',\n emit,\n props,\n attrs,\n {}\n )\n const onProcessing = useResourcefulPassthroughHook<'processing'>(\n 'processing',\n 'callOnProcessing',\n emit,\n props,\n attrs,\n {}\n )\n\n const schema = shallowRef<Schema>(joi.any().forbidden())\n const model = shallowRef<ResourcefulRecordModelSchema>({})\n const record = shallowRef<ResourceResourcefulRecordResponse | Record<string, any>>({})\n const doRefreshChoices = computed<Record<string, () => Promise<REnumFieldLoadedChoice[]>>>(\n () =>\n stripUndefinedValuesFromObject(\n Object.fromEntries(\n Object.entries(model.value).map(([prop, propSchema]) => {\n if (\n propSchema['x-resourceful-relationship'] &&\n 'string' === typeof propSchema['x-resourceful-relationship'].choices\n ) {\n return [\n prop,\n async () => {\n if (\n !propSchema['x-resourceful-relationship'] ||\n 'string' !== typeof propSchema['x-resourceful-relationship'].choices\n )\n return\n const uri =\n propSchema['x-resourceful-relationship'].choices.replace(\n /^\\#/,\n baseUrl.value\n ) +\n qs.stringify(\n {\n uid: uid.value || '0',\n },\n { addQueryPrefix: true }\n )\n try {\n const res = await http.get<{\n total: number\n choices: Array<{ title: string; value: string }>\n }>(uri)\n return res.data.choices\n } catch {\n return []\n }\n },\n ]\n }\n return [prop, undefined]\n })\n )\n ) as Record<string, () => Promise<REnumFieldLoadedChoice[]>>\n )\n const {\n exec: execMeta,\n percent: metaPercent,\n loading: metaLoading,\n loaded: metaLoaded,\n abort: abortMeta,\n } = useHttpElements(() => `${normalizedBaseUrl.value}/${metaEndpoint.value}`)\n const {\n exec: execRecord,\n percent: recordPercent,\n loading: recordLoading,\n loaded: recordLoaded,\n abort: abortRecord,\n } = useHttpElements(\n () => `${normalizedBaseUrl.value}/${uid.value}`,\n () => 'get',\n () => ({}),\n () => undefined,\n () => 5000,\n () => null\n )\n const commitPayload = shallowRef<Record<string, any>>({})\n const {\n exec: execCommit,\n loading: commitLoading,\n abort: abortCommit,\n } = useHttpElements(\n () =>\n mode.value === 'create'\n ? `${normalizedBaseUrl.value}/`\n : `${normalizedBaseUrl.value}/${uid.value}`,\n () => (mode.value === 'create' ? 'post' : 'patch'),\n () => ({}),\n () => commitPayload.value,\n () => 5000,\n () => null,\n () => {},\n (progress: ResourcefulHttpProgress) => onProcessing(progress, commitPayload.value)\n )\n const isErrored = ref(false)\n const loadMeta = async () => {\n abortMeta()\n const res = await execMeta<{\n schema: ResourcefulRecordModelSchema\n joiSchema: string\n }>()\n if (200 === res.status) {\n try {\n const decoded = decodeJoi(res.data.joiSchema) as ObjectSchema\n schema.value = decoded\n } catch (error) {\n warn('Failed to decode joiSchema:', error)\n schema.value = joi.any().forbidden()\n }\n model.value = res.data.schema as ResourcefulRecordModelSchema\n isErrored.value = false\n } else {\n warn('Error loading meta information for ResourcefulRecord', res)\n schema.value = joi.any().forbidden()\n model.value = {} as ResourcefulRecordModelSchema\n const errorCode = extractErrorCode(res)\n isErrored.value = true\n fire({\n icon: 'error',\n headline: t('resourcefulRecord.meta.badRequest.title'),\n text: format(t('resourcefulRecord.meta.badRequest.text'), errorCode),\n })\n }\n triggerRef(schema)\n triggerRef(model)\n nextTick(() => forceUpdateSchema())\n }\n const loadRecord = async () => {\n abortRecord()\n if ('create' === mode.value || !uid.value) {\n record.value = {}\n } else {\n const res = await execRecord<Record<string, any>>()\n if (200 === res.status) {\n record.value = res.data\n isErrored.value = false\n } else {\n record.value = {}\n warn('Error loading record for ResourcefulRecord', res)\n const errorCode = extractErrorCode(res)\n isErrored.value = true\n fire({\n icon: 'error',\n headline: t('resourcefulRecord.record.badRequest.title'),\n text: format(t('resourcefulRecord.record.badRequest.text'), errorCode),\n })\n }\n }\n triggerRef(record)\n nextTick(() => forceUpdateInitialValues())\n }\n const doCommit = async (\n values: Record<string, any>,\n onSubmissionHandlerSuccess: (\n response: ResourceResourcefulRecordResponse,\n values: Record<string, any>\n ) => void | Promise<void>,\n onSubmissionHandlerFailure: (\n response: ResourcefulHttpResponse,\n values: Record<string, any>\n ) => void | Promise<void>\n ) => {\n abortCommit()\n if ('read' === mode.value) return\n commitPayload.value = values\n const res = await execCommit<ResourceResourcefulRecordResponse>()\n if (res.status >= 200 && res.status < 300) {\n await onSubmissionHandlerSuccess(res.data, values)\n } else {\n await onSubmissionHandlerFailure(res, values)\n }\n }\n const doReset = async () => {\n await loadMeta()\n await loadRecord()\n nextTick(() => doResetForm())\n }\n watch(normalizedBaseUrl, () => loadMeta(), { immediate: true })\n watch(metaEndpoint, () => loadMeta(), {})\n watch(uid, () => loadRecord(), { immediate: true })\n watch(\n commandBus,\n (is: unknown, was: unknown) => {\n if (isResourcefulRecordBusConsumer(was)) {\n was.off('doFormSubmit', doFormSubmit)\n was.off('doResetForm', doResetForm)\n was.off('setFieldValue', setFieldValue)\n was.off('setValues', setValues)\n was.off('setFieldTouched', setFieldTouched)\n was.off('setTouched', setTouched)\n was.off('validate', validate)\n was.off('validateField', validateField)\n was.off('forceUpdateSchema', forceUpdateSchema)\n was.off('forceUpdateInitialValues', forceUpdateInitialValues)\n }\n if (isResourcefulRecordBusConsumer(is)) {\n is.on('doFormSubmit', doFormSubmit)\n is.on('doResetForm', doResetForm)\n is.on('setFieldValue', setFieldValue)\n is.on('setValues', setValues)\n is.on('setFieldTouched', setFieldTouched)\n is.on('setTouched', setTouched)\n is.on('validate', validate)\n is.on('validateField', validateField)\n is.on('forceUpdateSchema', forceUpdateSchema)\n is.on('forceUpdateInitialValues', forceUpdateInitialValues)\n }\n },\n { immediate: true }\n )\n const { smAndUp } = scopedDisplay\n const containerBindings = computed<ResourcefulRecordVCardProps>(() => ({\n ...container.value,\n tag: 'section',\n ...mergeProps(\n {\n class: ['resourceful-record'],\n },\n {\n class: container.value.class || [],\n }\n ),\n }))\n const submissionHandler: ResourcefulSubmissionHandler = async (\n values,\n onSubmissionHandlerSuccess: (\n response: ResourceResourcefulRecordResponse,\n values: Record<string, any>\n ) => void | Promise<void>,\n onSubmissionHandlerFailure: (\n response: ResourcefulHttpResponse,\n values: Record<string, any>\n ) => void | Promise<void>\n ) => await doCommit(values, onSubmissionHandlerSuccess, onSubmissionHandlerFailure)\n const computedInitialValues = computed(() => ({\n ...(initialValues.value || {}),\n ...(record.value || {}),\n }))\n const controlButtonsAreInactionable = computed(\n () => metaLoading.value || recordLoading.value || commitLoading.value\n )\n const controlButtonBaseBindings = useControlButtonBaseBindings(\n controlButtonBarOptions,\n controlButtonOptions,\n controlButtonsAreInactionable\n )\n const indexButtonBindings = useCrudActionButtonBindings(\n record,\n mode,\n routeToIndex,\n callbackToIndex,\n canIndex,\n {\n prependIcon: undefined,\n cta: t('resourcefulRecord.buttons.index.cta'),\n },\n indexButtonOverrides,\n controlButtonBaseBindings\n )\n const createButtonBindings = useCrudActionButtonBindings(\n record,\n mode,\n routeToCreate,\n callbackToCreate,\n canCreate,\n {\n prependIcon: undefined,\n cta: t('resourcefulRecord.buttons.create.cta'),\n },\n createButtonOverrides,\n controlButtonBaseBindings\n )\n const readButtonBindings = useCrudActionButtonBindings(\n record,\n mode,\n routeToRead,\n callbackToRead,\n canRead,\n {\n prependIcon: undefined,\n cta: t('resourcefulRecord.buttons.read.cta'),\n },\n readButtonOverrides,\n controlButtonBaseBindings\n )\n const updateButtonBindings = useCrudActionButtonBindings(\n record,\n mode,\n routeToUpdate,\n callbackToUpdate,\n canUpdate,\n {\n prependIcon: undefined,\n cta: t('resourcefulRecord.buttons.update.cta'),\n },\n updateButtonOverrides,\n controlButtonBaseBindings\n )\n const deleteButtonBindings = useCrudActionButtonBindings(\n record,\n mode,\n routeToDelete,\n callbackToDelete,\n canDelete,\n {\n prependIcon: undefined,\n cta: t('resourcefulRecord.buttons.delete.cta'),\n },\n deleteButtonOverrides,\n controlButtonBaseBindings\n )\n const additionalButtonBindings = useAdditionalActionButtonBindings(\n record,\n mode,\n controlButtonBaseBindings,\n additionalControlBarButtons,\n actions\n )\n const controlBarButtons = useControlBarButtonBindings(\n indexButtonBindings,\n createButtonBindings,\n readButtonBindings,\n updateButtonBindings,\n deleteButtonBindings,\n additionalButtonBindings\n )\n const controlBarBaseBindings = useControlBarBaseBindings(\n controlButtonBarOptions,\n controlButtonOptions\n )\n const controlBarBindings = computed<ControlButtonBarProps>(() => ({\n ...controlBarBaseBindings.value,\n buttons: controlBarButtons.value,\n }))\n const controlButtonBarRef = ref<ControlButtonBar | null>(null)\n const initialLoadingStatePercent = computed(() =>\n 'create' === mode.value ? metaPercent.value : (metaPercent.value + recordPercent.value) / 2\n )\n const showInitialLoadingState = computed(() =>\n 'create' === mode.value ? !metaLoaded.value : !metaLoaded.value || !recordLoaded.value\n )\n const showingErrorState = computed(() => isErrored.value && !showInitialLoadingState.value)\n const floatingControls = useResourcefulRecordFloatingControls(\n mode,\n controlButtonBaseBindings,\n commitButtonOverrides,\n resetButtonOverrides,\n refreshButtonOverrides,\n metaLoading,\n recordLoading,\n commitLoading,\n showingErrorState,\n () => doReset(),\n () => loadRecord(),\n () => doFormSubmit()\n )\n const baseFormBindings = computed<BaseResourcefulRecordProps>(\n () =>\n ({\n state: state.value,\n mode: mode.value,\n initialValues: computedInitialValues.value,\n additionalMessages: additionalMessages.value,\n overrideMessages: overrideMessages.value,\n callOnPrevented: callOnPrevented.value,\n callOnSubmitted: callOnSubmitted.value,\n callOnSuccess: callOnSuccess.value,\n callOnFailure: callOnFailure.value,\n callOnException: callOnException.value,\n callOnSubmittingStateChange: callOnSubmittingStateChange.value,\n callOnValidatingStateChange: callOnValidatingStateChange.value,\n callOnTouchedStateChange: callOnTouchedStateChange.value,\n callOnDirtyStateChange: callOnDirtyStateChange.value,\n callOnValidStateChange: callOnValidStateChange.value,\n callOnPendingStateChange: callOnPendingStateChange.value,\n callOnErrorsStateChange: callOnErrorsStateChange.value,\n callOnErrorBagStateChange: callOnErrorBagStateChange.value,\n callOnSubmitCountStateChange: callOnSubmitCountStateChange.value,\n fieldLabels: fieldLabels.value,\n advanced: advanced.value,\n commonFieldOptions: commonFieldOptions.value,\n specificFieldOptions: specificFieldOptions.value,\n bus: consumer,\n schema: schema.value,\n model: model.value,\n submissionHandler,\n fireAlertFn: fire,\n doRefreshChoices: doRefreshChoices.value,\n ...{\n 'onState': (formState: string | null | undefined) => emit('state', formState),\n 'onUpdate:state': (formState: string | null | undefined) =>\n emit('update:state', formState),\n 'onError': (error: unknown) => emit('error', error),\n 'onPrevented': onPrevented,\n 'onSubmitted': onSubmitted,\n 'onSuccess': onSuccess,\n 'onFailure': onFailure,\n // NOTE: onException handles errors during submission middleware chain processing\n 'onException': onException,\n 'onState:submitting': onSubmittingStateChange,\n 'onState:validating': onValidatingStateChange,\n 'onState:touched': onTouchedStateChange,\n 'onState:dirty': onDirtyStateChange,\n 'onState:valid': onValidStateChange,\n 'onState:pending': onPendingStateChange,\n 'onState:errors': onErrorsStateChange,\n 'onState:errorBag': onErrorBagStateChange,\n 'onState:submitCount': onSubmitCountStateChange,\n },\n }) satisfies BaseResourcefulRecordProps\n )\n const formRef = ref<ResourcefulRecordForm | null>(null)\n useRender(() =>\n h(\n VCard,\n {\n ref: containerVCardRef,\n ...containerBindings.value,\n },\n () => [\n h(VContainer, { fluid: true }, () => [\n h(VRow, {}, () => [\n h(\n VCol,\n {\n cols: 12,\n sm: 8,\n lg: 9,\n class: [\n 'd-flex',\n 'justify-center',\n {\n 'py-0':\n !smAndUp.value &&\n (!Array.isArray(controlBarBindings.value.buttons) ||\n controlBarBindings.value.buttons.length === 0),\n 'pt-0':\n !smAndUp.value &&\n Array.isArray(controlBarBindings.value.buttons) &&\n controlBarBindings.value.buttons.length > 0,\n },\n ],\n },\n () => [\n h(ControlButtonBar, {\n ref: controlButtonBarRef,\n ...controlBarBindings.value,\n }),\n ]\n ),\n h(\n VCol,\n {\n cols: 12,\n sm: 4,\n lg: 3,\n class: [\n 'd-flex',\n 'align-center',\n {\n 'justify-center': !smAndUp.value,\n 'justify-end': smAndUp.value,\n 'py-0': !smAndUp.value,\n },\n ],\n },\n () => [h('div', { class: ['d-flex', 'align-center'] }, floatingControls.value)]\n ),\n ]),\n ]),\n h(VProgressLinear, {\n color: metaLoading.value ? metaProgressColor.value : undefined,\n modelValue: metaLoading.value ? metaPercent.value : 0,\n height: '1px',\n }),\n showingErrorState.value\n ? h(\n VEmptyState,\n {\n headline: t('resourcefulRecord.form.badRequest.title'),\n text: t('resourcefulRecord.form.badRequest.text'),\n class: ['my-7'],\n height: 320,\n },\n {\n media: () =>\n slots['error-media'] ? slots['error-media']!() : h(VImg, { src: errorSvg }),\n }\n )\n : null,\n showInitialLoadingState.value\n ? h(\n VEmptyState,\n {\n headline: numeral(initialLoadingStatePercent.value / 100).format('0%'),\n text: t('resourcefulRecord.form.loading.text'),\n class: ['my-7'],\n height: 320,\n },\n {\n media: () =>\n slots['loading-media']\n ? slots['loading-media']({ percent: initialLoadingStatePercent.value })\n : h(VProgressCircular, {\n modelValue: initialLoadingStatePercent.value,\n color: props.metaProgressColor,\n size: 96,\n width: 10,\n }),\n }\n )\n : null,\n !showInitialLoadingState.value && !showingErrorState.value\n ? h(VContainer, { fluid: true }, () =>\n h(VRow, {}, () => [\n h(VCol, { cols: 12 }, () =>\n h(\n ResourcefulRecordForm,\n {\n ref: formRef,\n ...baseFormBindings.value,\n },\n {\n default: (...args: ResourcefulRecordFormDefaultSlotArgs) =>\n slots['form']\n ? slots['form'](...args, record.value)\n : renderDefaultResourcefulRecordForm(...args),\n }\n )\n ),\n ])\n )\n : null,\n renderDialogs(),\n ]\n )\n )\n const formValues = computed(() => (formRef.value ? formRef.value.formValues : {}))\n return {\n refresh: () => loadRecord(),\n doFormSubmit,\n doResetForm,\n setFieldValue,\n setValues,\n setFieldTouched,\n setTouched,\n validate,\n validateField,\n forceUpdateSchema,\n forceUpdateInitialValues,\n formValues,\n record,\n }\n },\n})\n\nexport type ResourcefulRecord = InstanceType<typeof ResourcefulRecord> & ComponentPublicInstance\n"],"names":["joi","qs.stringify","decodeJoi","format"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index-CdaTAyzs.mjs","sources":["../src/private/resourceful-record/index.ts"],"sourcesContent":["import * as qs from 'qs-esm'\nimport { useDefaults } from 'vuetify'\nimport { useAlert } from '../ux/alert'\nimport { useI18n, useHttp } from '../ioc'\nimport { default as numeral } from 'numeral'\nimport { printf as format } from 'fast-printf'\nimport { VImg } from 'vuetify/components/VImg'\nimport { ResourcefulRecordForm } from './form'\nimport { useScopedDisplay } from '../ux/display'\nimport { VCard } from 'vuetify/components/VCard'\nimport { ControlButtonBar } from '../control-button-bar'\nimport { VEmptyState } from 'vuetify/components/VEmptyState'\nimport { default as errorSvg } from '../icons/error.svg?url'\nimport { useRender } from '@nhtio/vuetifiable/util/useRender'\nimport { useHttpElements, extractErrorCode } from '../ux/http'\nimport { renderDefaultResourcefulRecordForm } from './renderers'\nimport { stripUndefinedValuesFromObject } from '../common/utils'\nimport { VContainer, VRow, VCol } from 'vuetify/components/VGrid'\nimport { VProgressLinear } from 'vuetify/components/VProgressLinear'\nimport { VProgressCircular } from 'vuetify/components/VProgressCircular'\nimport { validator as joi, decode as decodeJoi } from '@nhtio/validation'\nimport { makeResourcefulRecordProps, resourcefulRecordEmits } from './props'\nimport { ResourcefulRecordBusEmitter, isResourcefulRecordBusConsumer } from './types'\nimport {\n ResourcefulRecordScopedDisplaySymbol,\n ResourcefulRecordScopedBusConsumerSymbol,\n} from '../symbols'\nimport {\n defineComponent,\n h,\n toRefs,\n computed,\n ref,\n watch,\n warn,\n shallowRef,\n provide,\n triggerRef,\n nextTick,\n mergeProps,\n} from 'vue'\nimport {\n useControlBarBaseBindings,\n useControlBarButtonBindings,\n useAdditionalActionButtonBindings,\n useCrudActionButtonBindings,\n useControlButtonBaseBindings,\n useResourcefulRecordFloatingControls,\n useResourcefulPassthroughHook,\n} from './utils'\nimport type { FireAlertFn } from '../ux/alert'\nimport type { ComponentPublicInstance } from 'vue'\nimport type { ValidationProps } from '../ux/validation'\nimport type { REnumFieldLoadedChoice } from '../fields/enum'\nimport type { ControlButtonBarProps } from '../control-button-bar/props'\nimport type { Schema, ObjectSchema, ValidationError } from '@nhtio/validation'\nimport type { ResourcefulRecordVCardProps, BaseResourcefulRecordProps } from './props'\nimport type { ResourcefulHttpProgress, ResourcefulHttpResponse } from '../services/http'\nimport type {\n ResourcefulRecordModelSchema,\n ResourceResourcefulRecordResponse,\n ResourcefulRecordComponentSlots,\n ResourcefulSubmissionHandler,\n ResourcefulRecordFormDefaultSlotArgs,\n} from './types'\n\nexport const ResourcefulRecord = defineComponent({\n name: 'ResourcefulRecord',\n props: makeResourcefulRecordProps(),\n emits: resourcefulRecordEmits,\n slots: Object as ResourcefulRecordComponentSlots,\n setup(props, { slots, emit, attrs }) {\n const t = useI18n()\n const http = useHttp()\n const containerVCardRef = ref<VCard | null>(null)\n const scopedDisplay = useScopedDisplay(containerVCardRef)\n provide(ResourcefulRecordScopedDisplaySymbol, scopedDisplay)\n const bus = new ResourcefulRecordBusEmitter()\n const consumer = bus.spawn()\n\n const doFormSubmit = (...args: Parameters<ValidationProps['doFormSubmit']>) => {\n bus.emit('doFormSubmit', ...args)\n }\n const doResetForm = (...args: Parameters<ValidationProps['doResetForm']>) => {\n bus.emit('doResetForm', ...args)\n }\n const setFieldValue = (...args: Parameters<ValidationProps['setFieldValue']>) => {\n bus.emit('setFieldValue', ...args)\n }\n const setValues = (...args: Parameters<ValidationProps['setValues']>) => {\n bus.emit('setValues', ...args)\n }\n const setFieldTouched = (...args: Parameters<ValidationProps['setFieldTouched']>) => {\n bus.emit('setFieldTouched', ...args)\n }\n const setTouched = (...args: Parameters<ValidationProps['setTouched']>) => {\n bus.emit('setTouched', ...args)\n }\n const validate = (...args: Parameters<ValidationProps['validate']>) => {\n bus.emit('validate', ...args)\n }\n const validateField = (...args: Parameters<ValidationProps['validateField']>) => {\n bus.emit('validateField', ...args)\n }\n const forceUpdateSchema = (...args: Parameters<ValidationProps['forceUpdateSchema']>) => {\n bus.emit('forceUpdateSchema', ...args)\n }\n const forceUpdateInitialValues = (\n ...args: Parameters<ValidationProps['forceUpdateInitialValues']>\n ) => {\n bus.emit('forceUpdateInitialValues', ...args)\n }\n provide(ResourcefulRecordScopedBusConsumerSymbol, consumer)\n const {\n baseUrl,\n metaProgressColor,\n uid,\n container,\n controlButtonOptions,\n controlButtonBarOptions,\n routeToIndex,\n callbackToIndex,\n indexButtonOverrides,\n canIndex,\n routeToCreate,\n callbackToCreate,\n createButtonOverrides,\n canCreate,\n routeToRead,\n callbackToRead,\n readButtonOverrides,\n canRead,\n routeToUpdate,\n callbackToUpdate,\n updateButtonOverrides,\n canUpdate,\n routeToDelete,\n callbackToDelete,\n deleteButtonOverrides,\n canDelete,\n additionalControlBarButtons,\n actions,\n state,\n mode,\n initialValues,\n additionalMessages,\n overrideMessages,\n callOnPrevented,\n callOnSubmitted,\n callOnSuccess,\n callOnFailure,\n callOnException,\n callOnSubmittingStateChange,\n callOnValidatingStateChange,\n callOnTouchedStateChange,\n callOnDirtyStateChange,\n callOnValidStateChange,\n callOnPendingStateChange,\n callOnErrorsStateChange,\n callOnErrorBagStateChange,\n callOnSubmitCountStateChange,\n fieldLabels,\n advanced,\n specificFieldOptions,\n commitButtonOverrides,\n resetButtonOverrides,\n refreshButtonOverrides,\n bus: commandBus,\n fireAlertFn,\n } = toRefs(props)\n const defaultCommonFieldOptions = useDefaults(\n props.commonFieldOptions,\n 'ResourcefulRecordFormField'\n )\n const commonFieldOptions = computed(() => ({\n ...defaultCommonFieldOptions,\n density: scopedDisplay.xs\n ? ('compact' as const)\n : scopedDisplay.lgAndUp\n ? ('default' as const)\n : ('comfortable' as const),\n }))\n const normalizedBaseUrl = computed(() => {\n let url = baseUrl.value || ''\n if (url.endsWith('/')) {\n url = url.slice(0, -1)\n }\n return url\n })\n const metaEndpoint = computed(() => ('create' === mode.value ? '$meta.create' : '$meta.update'))\n const { renderDialogs, fire: doFire } = useAlert(containerVCardRef, true, true)\n const fire: FireAlertFn = (...args) =>\n fireAlertFn.value ? fireAlertFn.value(...args) : doFire(...args)\n const onPrevented = useResourcefulPassthroughHook<'prevented'>(\n 'prevented',\n 'callOnPrevented',\n emit,\n props,\n attrs,\n {\n fallback: (values: Record<string, any>, error: ValidationError) => {\n // show a dialog\n warn('Prevented submission with values:', values, 'and error:', error)\n fire({\n icon: 'error',\n title: t('resourcefulRecord.alerts.prevented.title'),\n text: t('resourcefulRecord.alerts.prevented.text'),\n })\n },\n }\n )\n const onSubmitted = useResourcefulPassthroughHook<'submitted'>(\n 'submitted',\n 'callOnSubmitted',\n emit,\n props,\n attrs,\n {}\n )\n const onSuccess = useResourcefulPassthroughHook<'success'>(\n 'success',\n 'callOnSuccess',\n emit,\n props,\n attrs,\n {\n fallback: async (response, values) => {\n console.debug('Form committed with values:', response, values)\n await fire({\n icon: 'success',\n title: t('resourcefulRecord.alerts.success.title'),\n text: t('resourcefulRecord.alerts.success.text'),\n })\n if ('create' === mode.value) {\n // clear the form for a new entry\n doResetForm()\n }\n },\n }\n )\n const onFailure = useResourcefulPassthroughHook<'failure'>(\n 'failure',\n 'callOnFailure',\n emit,\n props,\n attrs,\n {\n fallback: (response, values) => {\n console.debug('Form failed to commit with values:', response, values)\n // TODO: parse the response and try to give a bit more\n // context based on the response. For example, if it's a standard\n // resourceful response, we can use the error code, message and details\n // to provide better feedback.\n fire({\n icon: 'error',\n title: t('resourcefulRecord.alerts.failure.title'),\n text: t('resourcefulRecord.alerts.failure.text'),\n })\n },\n }\n )\n const onException = useResourcefulPassthroughHook<'exception'>(\n 'exception',\n 'callOnException',\n emit,\n props,\n attrs,\n {\n immediate: true,\n fallback: (exception: unknown) => {\n warn('Form submission exception:', exception)\n fire({\n icon: 'error',\n title: t('resourcefulRecord.alerts.exception.title'),\n text: t('resourcefulRecord.alerts.exception.text'),\n })\n },\n }\n )\n const onSubmittingStateChange = useResourcefulPassthroughHook<'state:submitting'>(\n 'state:submitting',\n 'callOnSubmittingStateChange',\n emit,\n props,\n attrs,\n {}\n )\n const onValidatingStateChange = useResourcefulPassthroughHook<'state:validating'>(\n 'state:validating',\n 'callOnValidatingStateChange',\n emit,\n props,\n attrs,\n {}\n )\n const onTouchedStateChange = useResourcefulPassthroughHook<'state:touched'>(\n 'state:touched',\n 'callOnTouchedStateChange',\n emit,\n props,\n attrs,\n {}\n )\n const onDirtyStateChange = useResourcefulPassthroughHook<'state:dirty'>(\n 'state:dirty',\n 'callOnDirtyStateChange',\n emit,\n props,\n attrs,\n {}\n )\n const onValidStateChange = useResourcefulPassthroughHook<'state:valid'>(\n 'state:valid',\n 'callOnValidStateChange',\n emit,\n props,\n attrs,\n {}\n )\n const onPendingStateChange = useResourcefulPassthroughHook<'state:pending'>(\n 'state:pending',\n 'callOnPendingStateChange',\n emit,\n props,\n attrs,\n {}\n )\n const onErrorsStateChange = useResourcefulPassthroughHook<'state:errors'>(\n 'state:errors',\n 'callOnErrorsStateChange',\n emit,\n props,\n attrs,\n {}\n )\n const onErrorBagStateChange = useResourcefulPassthroughHook<'state:errorBag'>(\n 'state:errorBag',\n 'callOnErrorBagStateChange',\n emit,\n props,\n attrs,\n {}\n )\n const onSubmitCountStateChange = useResourcefulPassthroughHook<'state:submitCount'>(\n 'state:submitCount',\n 'callOnSubmitCountStateChange',\n emit,\n props,\n attrs,\n {}\n )\n const onProcessing = useResourcefulPassthroughHook<'processing'>(\n 'processing',\n 'callOnProcessing',\n emit,\n props,\n attrs,\n {}\n )\n\n const schema = shallowRef<Schema>(joi.any().forbidden())\n const model = shallowRef<ResourcefulRecordModelSchema>({})\n const record = shallowRef<ResourceResourcefulRecordResponse | Record<string, any>>({})\n const doRefreshChoices = computed<Record<string, () => Promise<REnumFieldLoadedChoice[]>>>(\n () =>\n stripUndefinedValuesFromObject(\n Object.fromEntries(\n Object.entries(model.value).map(([prop, propSchema]) => {\n if (\n propSchema['x-resourceful-relationship'] &&\n 'string' === typeof propSchema['x-resourceful-relationship'].choices\n ) {\n return [\n prop,\n async () => {\n if (\n !propSchema['x-resourceful-relationship'] ||\n 'string' !== typeof propSchema['x-resourceful-relationship'].choices\n )\n return\n const uri =\n propSchema['x-resourceful-relationship'].choices.replace(\n /^\\#/,\n baseUrl.value\n ) +\n qs.stringify(\n {\n uid: uid.value || '0',\n },\n { addQueryPrefix: true }\n )\n try {\n const res = await http.get<{\n total: number\n choices: Array<{ title: string; value: string }>\n }>(uri)\n return res.data.choices\n } catch {\n return []\n }\n },\n ]\n }\n return [prop, undefined]\n })\n )\n ) as Record<string, () => Promise<REnumFieldLoadedChoice[]>>\n )\n const {\n exec: execMeta,\n percent: metaPercent,\n loading: metaLoading,\n loaded: metaLoaded,\n abort: abortMeta,\n } = useHttpElements(() => `${normalizedBaseUrl.value}/${metaEndpoint.value}`)\n const {\n exec: execRecord,\n percent: recordPercent,\n loading: recordLoading,\n loaded: recordLoaded,\n abort: abortRecord,\n } = useHttpElements(\n () => `${normalizedBaseUrl.value}/${uid.value}`,\n () => 'get',\n () => ({}),\n () => undefined,\n () => 5000,\n () => null\n )\n const commitPayload = shallowRef<Record<string, any>>({})\n const {\n exec: execCommit,\n loading: commitLoading,\n abort: abortCommit,\n } = useHttpElements(\n () =>\n mode.value === 'create'\n ? `${normalizedBaseUrl.value}/`\n : `${normalizedBaseUrl.value}/${uid.value}`,\n () => (mode.value === 'create' ? 'post' : 'patch'),\n () => ({}),\n () => commitPayload.value,\n () => 5000,\n () => null,\n () => {},\n (progress: ResourcefulHttpProgress) => onProcessing(progress, commitPayload.value)\n )\n const isErrored = ref(false)\n const loadMeta = async () => {\n abortMeta()\n const res = await execMeta<{\n schema: ResourcefulRecordModelSchema\n joiSchema: string\n }>()\n if (200 === res.status) {\n try {\n const decoded = decodeJoi(res.data.joiSchema) as ObjectSchema\n schema.value = decoded\n } catch (error) {\n warn('Failed to decode joiSchema:', error)\n schema.value = joi.any().forbidden()\n }\n model.value = res.data.schema as ResourcefulRecordModelSchema\n isErrored.value = false\n } else {\n warn('Error loading meta information for ResourcefulRecord', res)\n schema.value = joi.any().forbidden()\n model.value = {} as ResourcefulRecordModelSchema\n const errorCode = extractErrorCode(res)\n isErrored.value = true\n fire({\n icon: 'error',\n headline: t('resourcefulRecord.meta.badRequest.title'),\n text: format(t('resourcefulRecord.meta.badRequest.text'), errorCode),\n })\n }\n triggerRef(schema)\n triggerRef(model)\n nextTick(() => forceUpdateSchema())\n }\n const loadRecord = async () => {\n abortRecord()\n if ('create' === mode.value || !uid.value) {\n record.value = {}\n } else {\n const res = await execRecord<Record<string, any>>()\n if (200 === res.status) {\n record.value = res.data\n isErrored.value = false\n } else {\n record.value = {}\n warn('Error loading record for ResourcefulRecord', res)\n const errorCode = extractErrorCode(res)\n isErrored.value = true\n fire({\n icon: 'error',\n headline: t('resourcefulRecord.record.badRequest.title'),\n text: format(t('resourcefulRecord.record.badRequest.text'), errorCode),\n })\n }\n }\n triggerRef(record)\n nextTick(() => forceUpdateInitialValues())\n }\n const doCommit = async (\n values: Record<string, any>,\n onSubmissionHandlerSuccess: (\n response: ResourceResourcefulRecordResponse,\n values: Record<string, any>\n ) => void | Promise<void>,\n onSubmissionHandlerFailure: (\n response: ResourcefulHttpResponse,\n values: Record<string, any>\n ) => void | Promise<void>\n ) => {\n abortCommit()\n if ('read' === mode.value) return\n commitPayload.value = values\n const res = await execCommit<ResourceResourcefulRecordResponse>()\n if (res.status >= 200 && res.status < 300) {\n await onSubmissionHandlerSuccess(res.data, values)\n } else {\n await onSubmissionHandlerFailure(res, values)\n }\n }\n const doReset = async () => {\n await loadMeta()\n await loadRecord()\n nextTick(() => doResetForm())\n }\n watch(normalizedBaseUrl, () => loadMeta(), { immediate: true })\n watch(metaEndpoint, () => loadMeta(), {})\n watch(uid, () => loadRecord(), { immediate: true })\n watch(\n commandBus,\n (is: unknown, was: unknown) => {\n if (isResourcefulRecordBusConsumer(was)) {\n was.off('doFormSubmit', doFormSubmit)\n was.off('doResetForm', doResetForm)\n was.off('setFieldValue', setFieldValue)\n was.off('setValues', setValues)\n was.off('setFieldTouched', setFieldTouched)\n was.off('setTouched', setTouched)\n was.off('validate', validate)\n was.off('validateField', validateField)\n was.off('forceUpdateSchema', forceUpdateSchema)\n was.off('forceUpdateInitialValues', forceUpdateInitialValues)\n }\n if (isResourcefulRecordBusConsumer(is)) {\n is.on('doFormSubmit', doFormSubmit)\n is.on('doResetForm', doResetForm)\n is.on('setFieldValue', setFieldValue)\n is.on('setValues', setValues)\n is.on('setFieldTouched', setFieldTouched)\n is.on('setTouched', setTouched)\n is.on('validate', validate)\n is.on('validateField', validateField)\n is.on('forceUpdateSchema', forceUpdateSchema)\n is.on('forceUpdateInitialValues', forceUpdateInitialValues)\n }\n },\n { immediate: true }\n )\n const { smAndUp } = scopedDisplay\n const containerBindings = computed<ResourcefulRecordVCardProps>(() => ({\n ...container.value,\n tag: 'section',\n ...mergeProps(\n {\n class: ['resourceful-record'],\n },\n {\n class: container.value.class || [],\n }\n ),\n }))\n const submissionHandler: ResourcefulSubmissionHandler = async (\n values,\n onSubmissionHandlerSuccess: (\n response: ResourceResourcefulRecordResponse,\n values: Record<string, any>\n ) => void | Promise<void>,\n onSubmissionHandlerFailure: (\n response: ResourcefulHttpResponse,\n values: Record<string, any>\n ) => void | Promise<void>\n ) => await doCommit(values, onSubmissionHandlerSuccess, onSubmissionHandlerFailure)\n const computedInitialValues = computed(() => ({\n ...(initialValues.value || {}),\n ...(record.value || {}),\n }))\n const controlButtonsAreInactionable = computed(\n () => metaLoading.value || recordLoading.value || commitLoading.value\n )\n const controlButtonBaseBindings = useControlButtonBaseBindings(\n controlButtonBarOptions,\n controlButtonOptions,\n controlButtonsAreInactionable\n )\n const indexButtonBindings = useCrudActionButtonBindings(\n record,\n mode,\n routeToIndex,\n callbackToIndex,\n canIndex,\n {\n prependIcon: undefined,\n cta: t('resourcefulRecord.buttons.index.cta'),\n },\n indexButtonOverrides,\n controlButtonBaseBindings\n )\n const createButtonBindings = useCrudActionButtonBindings(\n record,\n mode,\n routeToCreate,\n callbackToCreate,\n canCreate,\n {\n prependIcon: undefined,\n cta: t('resourcefulRecord.buttons.create.cta'),\n },\n createButtonOverrides,\n controlButtonBaseBindings\n )\n const readButtonBindings = useCrudActionButtonBindings(\n record,\n mode,\n routeToRead,\n callbackToRead,\n canRead,\n {\n prependIcon: undefined,\n cta: t('resourcefulRecord.buttons.read.cta'),\n },\n readButtonOverrides,\n controlButtonBaseBindings\n )\n const updateButtonBindings = useCrudActionButtonBindings(\n record,\n mode,\n routeToUpdate,\n callbackToUpdate,\n canUpdate,\n {\n prependIcon: undefined,\n cta: t('resourcefulRecord.buttons.update.cta'),\n },\n updateButtonOverrides,\n controlButtonBaseBindings\n )\n const deleteButtonBindings = useCrudActionButtonBindings(\n record,\n mode,\n routeToDelete,\n callbackToDelete,\n canDelete,\n {\n prependIcon: undefined,\n cta: t('resourcefulRecord.buttons.delete.cta'),\n },\n deleteButtonOverrides,\n controlButtonBaseBindings\n )\n const additionalButtonBindings = useAdditionalActionButtonBindings(\n record,\n mode,\n controlButtonBaseBindings,\n additionalControlBarButtons,\n actions\n )\n const controlBarButtons = useControlBarButtonBindings(\n indexButtonBindings,\n createButtonBindings,\n readButtonBindings,\n updateButtonBindings,\n deleteButtonBindings,\n additionalButtonBindings\n )\n const controlBarBaseBindings = useControlBarBaseBindings(\n controlButtonBarOptions,\n controlButtonOptions\n )\n const controlBarBindings = computed<ControlButtonBarProps>(() => ({\n ...controlBarBaseBindings.value,\n buttons: controlBarButtons.value,\n }))\n const controlButtonBarRef = ref<ControlButtonBar | null>(null)\n const initialLoadingStatePercent = computed(() =>\n 'create' === mode.value ? metaPercent.value : (metaPercent.value + recordPercent.value) / 2\n )\n const showInitialLoadingState = computed(() =>\n 'create' === mode.value ? !metaLoaded.value : !metaLoaded.value || !recordLoaded.value\n )\n const showingErrorState = computed(() => isErrored.value && !showInitialLoadingState.value)\n const floatingControls = useResourcefulRecordFloatingControls(\n mode,\n controlButtonBaseBindings,\n commitButtonOverrides,\n resetButtonOverrides,\n refreshButtonOverrides,\n metaLoading,\n recordLoading,\n commitLoading,\n showingErrorState,\n () => doReset(),\n () => loadRecord(),\n () => doFormSubmit()\n )\n const baseFormBindings = computed<BaseResourcefulRecordProps>(\n () =>\n ({\n state: state.value,\n mode: mode.value,\n initialValues: computedInitialValues.value,\n additionalMessages: additionalMessages.value,\n overrideMessages: overrideMessages.value,\n callOnPrevented: callOnPrevented.value,\n callOnSubmitted: callOnSubmitted.value,\n callOnSuccess: callOnSuccess.value,\n callOnFailure: callOnFailure.value,\n callOnException: callOnException.value,\n callOnSubmittingStateChange: callOnSubmittingStateChange.value,\n callOnValidatingStateChange: callOnValidatingStateChange.value,\n callOnTouchedStateChange: callOnTouchedStateChange.value,\n callOnDirtyStateChange: callOnDirtyStateChange.value,\n callOnValidStateChange: callOnValidStateChange.value,\n callOnPendingStateChange: callOnPendingStateChange.value,\n callOnErrorsStateChange: callOnErrorsStateChange.value,\n callOnErrorBagStateChange: callOnErrorBagStateChange.value,\n callOnSubmitCountStateChange: callOnSubmitCountStateChange.value,\n fieldLabels: fieldLabels.value,\n advanced: advanced.value,\n commonFieldOptions: commonFieldOptions.value,\n specificFieldOptions: specificFieldOptions.value,\n bus: consumer,\n schema: schema.value,\n model: model.value,\n submissionHandler,\n fireAlertFn: fire,\n doRefreshChoices: doRefreshChoices.value,\n ...{\n 'onState': (formState: string | null | undefined) => emit('state', formState),\n 'onUpdate:state': (formState: string | null | undefined) =>\n emit('update:state', formState),\n 'onError': (error: unknown) => emit('error', error),\n 'onPrevented': onPrevented,\n 'onSubmitted': onSubmitted,\n 'onSuccess': onSuccess,\n 'onFailure': onFailure,\n // NOTE: onException handles errors during submission middleware chain processing\n 'onException': onException,\n 'onState:submitting': onSubmittingStateChange,\n 'onState:validating': onValidatingStateChange,\n 'onState:touched': onTouchedStateChange,\n 'onState:dirty': onDirtyStateChange,\n 'onState:valid': onValidStateChange,\n 'onState:pending': onPendingStateChange,\n 'onState:errors': onErrorsStateChange,\n 'onState:errorBag': onErrorBagStateChange,\n 'onState:submitCount': onSubmitCountStateChange,\n },\n }) satisfies BaseResourcefulRecordProps\n )\n const formRef = ref<ResourcefulRecordForm | null>(null)\n useRender(() =>\n h(\n VCard,\n {\n ref: containerVCardRef,\n ...containerBindings.value,\n },\n () => [\n h(VContainer, { fluid: true }, () => [\n h(VRow, {}, () => [\n h(\n VCol,\n {\n cols: 12,\n sm: 8,\n lg: 9,\n class: [\n 'd-flex',\n 'justify-center',\n {\n 'py-0':\n !smAndUp.value &&\n (!Array.isArray(controlBarBindings.value.buttons) ||\n controlBarBindings.value.buttons.length === 0),\n 'pt-0':\n !smAndUp.value &&\n Array.isArray(controlBarBindings.value.buttons) &&\n controlBarBindings.value.buttons.length > 0,\n },\n ],\n },\n () => [\n h(ControlButtonBar, {\n ref: controlButtonBarRef,\n ...controlBarBindings.value,\n }),\n ]\n ),\n h(\n VCol,\n {\n cols: 12,\n sm: 4,\n lg: 3,\n class: [\n 'd-flex',\n 'align-center',\n {\n 'justify-center': !smAndUp.value,\n 'justify-end': smAndUp.value,\n 'py-0': !smAndUp.value,\n },\n ],\n },\n () => [h('div', { class: ['d-flex', 'align-center'] }, floatingControls.value)]\n ),\n ]),\n ]),\n h(VProgressLinear, {\n color: metaLoading.value ? metaProgressColor.value : undefined,\n modelValue: metaLoading.value ? metaPercent.value : 0,\n height: '1px',\n }),\n showingErrorState.value\n ? h(\n VEmptyState,\n {\n headline: t('resourcefulRecord.form.badRequest.title'),\n text: t('resourcefulRecord.form.badRequest.text'),\n class: ['my-7'],\n height: 320,\n },\n {\n media: () =>\n slots['error-media'] ? slots['error-media']!() : h(VImg, { src: errorSvg }),\n }\n )\n : null,\n showInitialLoadingState.value\n ? h(\n VEmptyState,\n {\n headline: numeral(initialLoadingStatePercent.value / 100).format('0%'),\n text: t('resourcefulRecord.form.loading.text'),\n class: ['my-7'],\n height: 320,\n },\n {\n media: () =>\n slots['loading-media']\n ? slots['loading-media']({ percent: initialLoadingStatePercent.value })\n : h(VProgressCircular, {\n modelValue: initialLoadingStatePercent.value,\n color: props.metaProgressColor,\n size: 96,\n width: 10,\n }),\n }\n )\n : null,\n !showInitialLoadingState.value && !showingErrorState.value\n ? h(VContainer, { fluid: true }, () =>\n h(VRow, {}, () => [\n h(VCol, { cols: 12 }, () =>\n h(\n ResourcefulRecordForm,\n {\n ref: formRef,\n ...baseFormBindings.value,\n },\n {\n default: (...args: ResourcefulRecordFormDefaultSlotArgs) =>\n slots['form']\n ? slots['form'](...args, record.value)\n : renderDefaultResourcefulRecordForm(...args),\n }\n )\n ),\n ])\n )\n : null,\n renderDialogs(),\n ]\n )\n )\n const formValues = computed(() => (formRef.value ? formRef.value.formValues : {}))\n return {\n refresh: () => loadRecord(),\n doFormSubmit,\n doResetForm,\n setFieldValue,\n setValues,\n setFieldTouched,\n setTouched,\n validate,\n validateField,\n forceUpdateSchema,\n forceUpdateInitialValues,\n formValues,\n record,\n }\n },\n})\n\nexport type ResourcefulRecord = InstanceType<typeof ResourcefulRecord> & ComponentPublicInstance\n"],"names":["joi","qs.stringify","decodeJoi","format"],"mappings":"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"}
|
package/index.mjs
CHANGED
|
@@ -3,12 +3,12 @@ import { F, i, u as u2 } from "./validation-41gHTtyY.mjs";
|
|
|
3
3
|
import { T, g, a, u as u3, b, c } from "./index-DLzoBhUb.mjs";
|
|
4
4
|
import { S, s } from "./index-CduefDwU.mjs";
|
|
5
5
|
import { S as S2, o, u as u4 } from "./index-CvhhGjZn.mjs";
|
|
6
|
-
import { b as b2, c as c2, E, a as a2, R as R2 } from "./index-
|
|
7
|
-
import { R as R3 } from "./index-
|
|
6
|
+
import { b as b2, c as c2, E, a as a2, R as R2 } from "./index-Cb3Fmo7E.mjs";
|
|
7
|
+
import { R as R3 } from "./index-CdaTAyzs.mjs";
|
|
8
8
|
import { a as a3, R as R4 } from "./form-BkQlevYR.mjs";
|
|
9
|
-
import { R as R5, r, a as a4 } from "./renderers-
|
|
9
|
+
import { R as R5, r, a as a4 } from "./renderers-DLsO8zG-.mjs";
|
|
10
10
|
import { R as R6 } from "./bigint-DXS_rVbG.mjs";
|
|
11
|
-
import { R as R7, b as b3, a as a5 } from "./boolean-
|
|
11
|
+
import { R as R7, b as b3, a as a5 } from "./boolean-BTu-4Ihs.mjs";
|
|
12
12
|
import { R as R8, a as a6 } from "./date_time-BNsYnH-e.mjs";
|
|
13
13
|
import { R as R9 } from "./date-B8edF8kU.mjs";
|
|
14
14
|
import { R as R10, a as a7 } from "./enum-DoxJn16e.mjs";
|
|
@@ -43,7 +43,7 @@ import { I as I2, S as S4, d as d7, o as o3, a as a16, p as p2, t as t2 } from "
|
|
|
43
43
|
import { d as d8, e as e6 } from "./vendor-nhtio-validation-IJWW0vrt.mjs";
|
|
44
44
|
import { n as n2 } from "./numeral-DmC5bR5g.mjs";
|
|
45
45
|
import { d as d9, e as e7 } from "./index-BEXQjukb.mjs";
|
|
46
|
-
const version = "0.1.0-master-
|
|
46
|
+
const version = "0.1.0-master-2b799e79";
|
|
47
47
|
const printf = printfExports.printf;
|
|
48
48
|
export {
|
|
49
49
|
B as BaseException,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nhtio/lucid-resourceful-vue-components",
|
|
3
|
-
"version": "0.1.0-master-
|
|
3
|
+
"version": "0.1.0-master-2b799e79",
|
|
4
4
|
"description": "Vue Components for interacting with Lucid Resourceful Models via Lucid Resourceful Routes",
|
|
5
5
|
"keywords": [],
|
|
6
6
|
"author": "Jak Giveon <jak@nht.io>",
|
|
@@ -55,14 +55,14 @@
|
|
|
55
55
|
"import": "./icons.mjs",
|
|
56
56
|
"types": "./icons.d.ts"
|
|
57
57
|
},
|
|
58
|
-
"./ioc": {
|
|
59
|
-
"import": "./ioc.mjs",
|
|
60
|
-
"types": "./ioc.d.ts"
|
|
61
|
-
},
|
|
62
58
|
"./symbols": {
|
|
63
59
|
"import": "./symbols.mjs",
|
|
64
60
|
"types": "./symbols.d.ts"
|
|
65
61
|
},
|
|
62
|
+
"./ioc": {
|
|
63
|
+
"import": "./ioc.mjs",
|
|
64
|
+
"types": "./ioc.d.ts"
|
|
65
|
+
},
|
|
66
66
|
"./types": {
|
|
67
67
|
"import": "./types.mjs",
|
|
68
68
|
"types": "./types.d.ts"
|
|
@@ -99,26 +99,30 @@
|
|
|
99
99
|
"import": "./components/form_with_validation.mjs",
|
|
100
100
|
"types": "./components/form_with_validation.d.ts"
|
|
101
101
|
},
|
|
102
|
-
"./components/
|
|
103
|
-
"import": "./components/
|
|
104
|
-
"types": "./components/
|
|
102
|
+
"./components/resourceful_record_default_form": {
|
|
103
|
+
"import": "./components/resourceful_record_default_form.mjs",
|
|
104
|
+
"types": "./components/resourceful_record_default_form.d.ts"
|
|
105
105
|
},
|
|
106
|
-
"./components/
|
|
107
|
-
"import": "./components/
|
|
108
|
-
"types": "./components/
|
|
106
|
+
"./components/resourceful_index": {
|
|
107
|
+
"import": "./components/resourceful_index.mjs",
|
|
108
|
+
"types": "./components/resourceful_index.d.ts"
|
|
109
109
|
},
|
|
110
110
|
"./components/sortable": {
|
|
111
111
|
"import": "./components/sortable.mjs",
|
|
112
112
|
"types": "./components/sortable.d.ts"
|
|
113
113
|
},
|
|
114
|
-
"./components/
|
|
115
|
-
"import": "./components/
|
|
116
|
-
"types": "./components/
|
|
114
|
+
"./components/resourceful_record_form": {
|
|
115
|
+
"import": "./components/resourceful_record_form.mjs",
|
|
116
|
+
"types": "./components/resourceful_record_form.d.ts"
|
|
117
117
|
},
|
|
118
118
|
"./components/timezone_picker": {
|
|
119
119
|
"import": "./components/timezone_picker.mjs",
|
|
120
120
|
"types": "./components/timezone_picker.d.ts"
|
|
121
121
|
},
|
|
122
|
+
"./components/svg_icon": {
|
|
123
|
+
"import": "./components/svg_icon.mjs",
|
|
124
|
+
"types": "./components/svg_icon.d.ts"
|
|
125
|
+
},
|
|
122
126
|
"./components/fields/bigint": {
|
|
123
127
|
"import": "./components/fields/bigint.mjs",
|
|
124
128
|
"types": "./components/fields/bigint.d.ts"
|
|
@@ -143,29 +147,25 @@
|
|
|
143
147
|
"import": "./components/fields/integer.mjs",
|
|
144
148
|
"types": "./components/fields/integer.d.ts"
|
|
145
149
|
},
|
|
146
|
-
"./components/fields/number": {
|
|
147
|
-
"import": "./components/fields/number.mjs",
|
|
148
|
-
"types": "./components/fields/number.d.ts"
|
|
149
|
-
},
|
|
150
150
|
"./components/fields/string": {
|
|
151
151
|
"import": "./components/fields/string.mjs",
|
|
152
152
|
"types": "./components/fields/string.d.ts"
|
|
153
153
|
},
|
|
154
|
+
"./components/fields/number": {
|
|
155
|
+
"import": "./components/fields/number.mjs",
|
|
156
|
+
"types": "./components/fields/number.d.ts"
|
|
157
|
+
},
|
|
154
158
|
"./components/fields/unsigned_integer": {
|
|
155
159
|
"import": "./components/fields/unsigned_integer.mjs",
|
|
156
160
|
"types": "./components/fields/unsigned_integer.d.ts"
|
|
157
161
|
},
|
|
158
|
-
"./components/resourceful_record_default_form": {
|
|
159
|
-
"import": "./components/resourceful_record_default_form.mjs",
|
|
160
|
-
"types": "./components/resourceful_record_default_form.d.ts"
|
|
161
|
-
},
|
|
162
162
|
"./components/resourceful_record": {
|
|
163
163
|
"import": "./components/resourceful_record.mjs",
|
|
164
164
|
"types": "./components/resourceful_record.d.ts"
|
|
165
165
|
},
|
|
166
|
-
"./components/
|
|
167
|
-
"import": "./components/
|
|
168
|
-
"types": "./components/
|
|
166
|
+
"./components/resourceful_alerter": {
|
|
167
|
+
"import": "./components/resourceful_alerter.mjs",
|
|
168
|
+
"types": "./components/resourceful_alerter.d.ts"
|
|
169
169
|
}
|
|
170
170
|
},
|
|
171
171
|
"packageManager": "pnpm@10.8.0+sha512.0e82714d1b5b43c74610193cb20734897c1d00de89d0e18420aebc5977fa13d780a9cb05734624e81ebd81cc876cd464794850641c48b9544326b5622ca29971",
|
|
@@ -4,7 +4,7 @@ import { D as DevErrorAlert } from "./common-a_cd4SQg.mjs";
|
|
|
4
4
|
import { v as validator } from "./vendor-nhtio-validation-IJWW0vrt.mjs";
|
|
5
5
|
import { p as propsAndEmitsFactory, q as typeAndFormatToResourcefulFieldType, s as stripUndefinedValuesFromObject } from "./utils-DehfJ8pT.mjs";
|
|
6
6
|
import { R as RBigIntField } from "./bigint-DXS_rVbG.mjs";
|
|
7
|
-
import { R as RBooleanField } from "./boolean-
|
|
7
|
+
import { R as RBooleanField } from "./boolean-BTu-4Ihs.mjs";
|
|
8
8
|
import { R as RDateTimeField } from "./date_time-BNsYnH-e.mjs";
|
|
9
9
|
import { R as RDateField } from "./date-B8edF8kU.mjs";
|
|
10
10
|
import { R as RIntegerField } from "./integer-BWdmDp7S.mjs";
|
|
@@ -226,4 +226,4 @@ export {
|
|
|
226
226
|
renderResourcefulRecordModelPropertyField as a,
|
|
227
227
|
renderDefaultResourcefulRecordForm as r
|
|
228
228
|
};
|
|
229
|
-
//# sourceMappingURL=renderers-
|
|
229
|
+
//# sourceMappingURL=renderers-DLsO8zG-.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderers-bwWUs06k.mjs","sources":["../src/private/resourceful-record/renderers.ts"],"sourcesContent":["import { useI18n } from '../ioc'\nimport { h, defineComponent, toRefs } from 'vue'\nimport { DevErrorAlert } from '../fields/common'\nimport { validator as joi } from '@nhtio/validation'\nimport { propsAndEmitsFactory } from '../common/factories'\nimport { VContainer, VRow, VCol } from 'vuetify/components/VGrid'\nimport {\n stripUndefinedValuesFromObject,\n typeAndFormatToResourcefulFieldType,\n} from '../common/utils'\nimport {\n RBigIntField,\n RBooleanField,\n RDateTimeField,\n RDateField,\n RIntegerField,\n RNumberField,\n RStringField,\n RUnsignedIntegerField,\n REnumField,\n} from '../fields'\nimport type { FireAlertFn } from '../ux/alert'\nimport type { Schema } from '@nhtio/validation'\nimport type { ScopedDisplayProps } from '../ux/validation'\nimport type { REnumFieldLoadedChoice } from '../fields/enum'\nimport type { ValidationFieldBindings } from '../ux/validation'\nimport type { CommonResourcefulFieldPublicProps } from '../fields/common'\nimport type { VNode, ComputedRef, PropType, ComponentPublicInstance, ExtractPropTypes } from 'vue'\nimport type {\n ResourcefulRecordViewMode,\n ResourcefulRecordModelSchema,\n ResourcefulRecordModelPropertySchema,\n ResourcefulRecordFormWithValidationDefaultSlotProps,\n} from './types'\nimport type {\n RBigIntFieldProps,\n RBooleanFieldProps,\n RDateTimeFieldProps,\n RDateFieldProps,\n RIntegerFieldProps,\n RNumberFieldProps,\n RStringFieldProps,\n RUnsignedIntegerFieldProps,\n REnumFieldProps,\n} from '../fields'\n\nconst extractKnownKeyFromJoiSchema = (schema: Schema, key: string): Schema => {\n try {\n return schema.extract(key)\n } catch {\n return joi.any()\n }\n}\n\nconst {\n makeProps: makeDefaultResourcefulRecordFormProps,\n emits: defaultResourcefulRecordFormEmits,\n} = propsAndEmitsFactory(\n {\n props: {\n type: Object as PropType<ResourcefulRecordFormWithValidationDefaultSlotProps>,\n required: true,\n },\n display: {\n type: Object as PropType<ScopedDisplayProps>,\n required: true,\n },\n model: {\n type: Object as PropType<ResourcefulRecordModelSchema>,\n required: true,\n },\n schema: {\n type: Object as PropType<Schema>,\n required: true,\n },\n mode: {\n type: String as PropType<ResourcefulRecordViewMode>,\n default: 'update',\n },\n fieldLabels: {\n type: Object as PropType<Record<string, string>>,\n default: () => ({}),\n },\n doRefreshChoices: {\n type: Object as PropType<Record<string, () => Promise<REnumFieldLoadedChoice[]>>>,\n default: () => ({}),\n },\n },\n {},\n 'ResourcefulRecordDefaultForm'\n)\n\ntype ResourcefulRecordDefaultFormInstanceProps = ExtractPropTypes<\n ReturnType<typeof makeDefaultResourcefulRecordFormProps>\n>\n\nexport const ResourcefulRecordDefaultForm = defineComponent({\n name: 'ResourcefulRecordDefaultForm',\n props: makeDefaultResourcefulRecordFormProps(),\n emits: defaultResourcefulRecordFormEmits,\n setup(instanceProps: ResourcefulRecordDefaultFormInstanceProps) {\n const { props, display, model, schema, mode, doRefreshChoices } = toRefs(instanceProps)\n return () =>\n h(VContainer, { fluid: true }, () =>\n Object.entries(model.value)\n .filter(([, propSchema]) => {\n switch (mode.value) {\n case 'create':\n return (\n !propSchema['x-resourceful-autocreated'] &&\n !propSchema['x-resourceful-primary-key']\n )\n\n case 'update':\n return (\n !propSchema['x-resourceful-autoupdated'] && !propSchema['x-resourceful-immutable']\n )\n default:\n return true\n }\n })\n .map(([key, propSchema]) =>\n h(VRow, {}, () =>\n h(VCol, {}, () =>\n renderResourcefulRecordModelPropertyField(\n propSchema,\n extractKnownKeyFromJoiSchema(schema.value, key),\n props.value.useField(key),\n mode.value,\n display.value,\n doRefreshChoices.value[key]\n )\n )\n )\n )\n )\n },\n})\n\nexport type ResourcefulRecordDefaultForm = typeof ResourcefulRecordDefaultForm &\n ComponentPublicInstance\n\nexport const renderDefaultResourcefulRecordForm = <TSchema extends Schema>(\n props: ResourcefulRecordFormWithValidationDefaultSlotProps,\n display: ScopedDisplayProps,\n model: ResourcefulRecordModelSchema,\n schema: TSchema,\n mode: ResourcefulRecordViewMode = 'update',\n _fire: FireAlertFn = () =>\n Promise.resolve({ isConfirmed: false, isDenied: false, isCanceled: true, value: null }),\n doRefreshChoices: Record<string, () => Promise<REnumFieldLoadedChoice[]>> = {}\n): VNode => {\n return h(ResourcefulRecordDefaultForm, {\n props,\n display,\n model,\n schema,\n mode,\n doRefreshChoices,\n })\n}\n\nexport const renderResourcefulRecordModelPropertyField = (\n schema: ResourcefulRecordModelPropertySchema,\n validator: Schema,\n bindings: ComputedRef<ValidationFieldBindings>,\n mode: ResourcefulRecordViewMode,\n display: ScopedDisplayProps,\n doRefreshChoices?: (() => Promise<REnumFieldLoadedChoice[]>) | undefined\n): VNode => {\n const t = useI18n()\n const renderableFieldType = typeAndFormatToResourcefulFieldType(schema.type, schema.format)\n let renderMode: CommonResourcefulFieldPublicProps['renderMode'] =\n mode === 'read' ? 'read' : 'edit'\n if (renderMode === 'edit') {\n /**\n * Force rendering of autocreated/autoupdated/immutable/primary-key fields as read-only\n */\n if (\n mode === 'create' &&\n (schema['x-resourceful-autocreated'] || schema['x-resourceful-primary-key'])\n ) {\n renderMode = 'read'\n }\n if (\n mode === 'update' &&\n (schema['x-resourceful-autoupdated'] || schema['x-resourceful-immutable'])\n ) {\n renderMode = 'read'\n }\n }\n const commonProps: CommonResourcefulFieldPublicProps = {\n renderMode,\n multiple: validator.type === 'array',\n choices: undefined,\n allowUnspecifiedChoices: false,\n density: display.xs ? 'compact' : display.lgAndUp ? 'default' : 'comfortable',\n ...bindings.value,\n }\n if (schema['x-resourceful-relationship']) {\n commonProps.label = schema['x-resourceful-relationship'].title\n commonProps.multiple = schema['x-resourceful-relationship'].multiple\n if (Array.isArray(schema['x-resourceful-relationship'].choices)) {\n commonProps.choices = schema['x-resourceful-relationship'].choices\n }\n } else if ('x-resourceful-choices' in schema && Array.isArray(schema['x-resourceful-choices'])) {\n commonProps.choices = schema['x-resourceful-choices'].map((c) => ({\n value: c.value,\n label: c.i18n ? t(c.title || c.value) : c.title || c.value,\n }))\n }\n if (\n validator.type !== 'array' &&\n (schema['x-resourceful-relationship'] ||\n ('x-resourceful-choices' in schema && Array.isArray(schema['x-resourceful-choices'])))\n ) {\n return h(REnumField, {\n // Field specifics\n clearable: schema.nullable || false,\n ...stripUndefinedValuesFromObject({\n doRefreshChoices,\n }),\n // Common props\n ...commonProps,\n } satisfies Partial<REnumFieldProps>)\n }\n switch (renderableFieldType) {\n case 'string':\n return h(RStringField, {\n // Field specifics\n format: schema.format as any,\n clearable: schema.nullable || false,\n // Common props\n ...commonProps,\n } satisfies Partial<RStringFieldProps>)\n case 'date':\n return h(RDateField, {\n // Field specifics\n clearable: schema.nullable || false,\n // Common props\n ...commonProps,\n } satisfies Partial<RDateFieldProps>)\n case 'dateTime':\n return h(RDateTimeField, {\n // Field specifics\n clearable: schema.nullable || false,\n // Common props\n ...commonProps,\n } satisfies Partial<RDateTimeFieldProps>)\n case 'binary':\n return h(DevErrorAlert, {})\n case 'number':\n return h(RNumberField, {\n // Field specifics\n min: schema.minimum,\n max: schema.maximum,\n step: schema.multipleOf,\n // Common props\n ...commonProps,\n } satisfies Partial<RNumberFieldProps>)\n case 'integer':\n return h(RIntegerField, {\n // Field specifics\n min: schema.minimum,\n max: schema.maximum,\n step: schema.multipleOf,\n // Common props\n ...commonProps,\n } satisfies Partial<RIntegerFieldProps>)\n case 'bigint':\n return h(RBigIntField, {\n // Field specifics\n min: schema.minimum,\n max: schema.maximum,\n step: schema.multipleOf,\n // Common props\n ...commonProps,\n } satisfies Partial<RBigIntFieldProps>)\n case 'unsignedInteger':\n return h(RUnsignedIntegerField, {\n // Field specifics\n min: schema.minimum,\n max: schema.maximum,\n step: schema.multipleOf,\n // Common props\n ...commonProps,\n } satisfies Partial<RUnsignedIntegerFieldProps>)\n case 'boolean':\n return h(RBooleanField, {\n // Field specifics\n choices: schema.nullable ? [true, false, null] : [true, false],\n // Common props\n ...commonProps,\n } satisfies Partial<RBooleanFieldProps>)\n default:\n return h(DevErrorAlert, {})\n }\n}\n"],"names":["joi","validator"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"renderers-DLsO8zG-.mjs","sources":["../src/private/resourceful-record/renderers.ts"],"sourcesContent":["import { useI18n } from '../ioc'\nimport { h, defineComponent, toRefs } from 'vue'\nimport { DevErrorAlert } from '../fields/common'\nimport { validator as joi } from '@nhtio/validation'\nimport { propsAndEmitsFactory } from '../common/factories'\nimport { VContainer, VRow, VCol } from 'vuetify/components/VGrid'\nimport {\n stripUndefinedValuesFromObject,\n typeAndFormatToResourcefulFieldType,\n} from '../common/utils'\nimport {\n RBigIntField,\n RBooleanField,\n RDateTimeField,\n RDateField,\n RIntegerField,\n RNumberField,\n RStringField,\n RUnsignedIntegerField,\n REnumField,\n} from '../fields'\nimport type { FireAlertFn } from '../ux/alert'\nimport type { Schema } from '@nhtio/validation'\nimport type { ScopedDisplayProps } from '../ux/validation'\nimport type { REnumFieldLoadedChoice } from '../fields/enum'\nimport type { ValidationFieldBindings } from '../ux/validation'\nimport type { CommonResourcefulFieldPublicProps } from '../fields/common'\nimport type { VNode, ComputedRef, PropType, ComponentPublicInstance, ExtractPropTypes } from 'vue'\nimport type {\n ResourcefulRecordViewMode,\n ResourcefulRecordModelSchema,\n ResourcefulRecordModelPropertySchema,\n ResourcefulRecordFormWithValidationDefaultSlotProps,\n} from './types'\nimport type {\n RBigIntFieldProps,\n RBooleanFieldProps,\n RDateTimeFieldProps,\n RDateFieldProps,\n RIntegerFieldProps,\n RNumberFieldProps,\n RStringFieldProps,\n RUnsignedIntegerFieldProps,\n REnumFieldProps,\n} from '../fields'\n\nconst extractKnownKeyFromJoiSchema = (schema: Schema, key: string): Schema => {\n try {\n return schema.extract(key)\n } catch {\n return joi.any()\n }\n}\n\nconst {\n makeProps: makeDefaultResourcefulRecordFormProps,\n emits: defaultResourcefulRecordFormEmits,\n} = propsAndEmitsFactory(\n {\n props: {\n type: Object as PropType<ResourcefulRecordFormWithValidationDefaultSlotProps>,\n required: true,\n },\n display: {\n type: Object as PropType<ScopedDisplayProps>,\n required: true,\n },\n model: {\n type: Object as PropType<ResourcefulRecordModelSchema>,\n required: true,\n },\n schema: {\n type: Object as PropType<Schema>,\n required: true,\n },\n mode: {\n type: String as PropType<ResourcefulRecordViewMode>,\n default: 'update',\n },\n fieldLabels: {\n type: Object as PropType<Record<string, string>>,\n default: () => ({}),\n },\n doRefreshChoices: {\n type: Object as PropType<Record<string, () => Promise<REnumFieldLoadedChoice[]>>>,\n default: () => ({}),\n },\n },\n {},\n 'ResourcefulRecordDefaultForm'\n)\n\ntype ResourcefulRecordDefaultFormInstanceProps = ExtractPropTypes<\n ReturnType<typeof makeDefaultResourcefulRecordFormProps>\n>\n\nexport const ResourcefulRecordDefaultForm = defineComponent({\n name: 'ResourcefulRecordDefaultForm',\n props: makeDefaultResourcefulRecordFormProps(),\n emits: defaultResourcefulRecordFormEmits,\n setup(instanceProps: ResourcefulRecordDefaultFormInstanceProps) {\n const { props, display, model, schema, mode, doRefreshChoices } = toRefs(instanceProps)\n return () =>\n h(VContainer, { fluid: true }, () =>\n Object.entries(model.value)\n .filter(([, propSchema]) => {\n switch (mode.value) {\n case 'create':\n return (\n !propSchema['x-resourceful-autocreated'] &&\n !propSchema['x-resourceful-primary-key']\n )\n\n case 'update':\n return (\n !propSchema['x-resourceful-autoupdated'] && !propSchema['x-resourceful-immutable']\n )\n default:\n return true\n }\n })\n .map(([key, propSchema]) =>\n h(VRow, {}, () =>\n h(VCol, {}, () =>\n renderResourcefulRecordModelPropertyField(\n propSchema,\n extractKnownKeyFromJoiSchema(schema.value, key),\n props.value.useField(key),\n mode.value,\n display.value,\n doRefreshChoices.value[key]\n )\n )\n )\n )\n )\n },\n})\n\nexport type ResourcefulRecordDefaultForm = typeof ResourcefulRecordDefaultForm &\n ComponentPublicInstance\n\nexport const renderDefaultResourcefulRecordForm = <TSchema extends Schema>(\n props: ResourcefulRecordFormWithValidationDefaultSlotProps,\n display: ScopedDisplayProps,\n model: ResourcefulRecordModelSchema,\n schema: TSchema,\n mode: ResourcefulRecordViewMode = 'update',\n _fire: FireAlertFn = () =>\n Promise.resolve({ isConfirmed: false, isDenied: false, isCanceled: true, value: null }),\n doRefreshChoices: Record<string, () => Promise<REnumFieldLoadedChoice[]>> = {}\n): VNode => {\n return h(ResourcefulRecordDefaultForm, {\n props,\n display,\n model,\n schema,\n mode,\n doRefreshChoices,\n })\n}\n\nexport const renderResourcefulRecordModelPropertyField = (\n schema: ResourcefulRecordModelPropertySchema,\n validator: Schema,\n bindings: ComputedRef<ValidationFieldBindings>,\n mode: ResourcefulRecordViewMode,\n display: ScopedDisplayProps,\n doRefreshChoices?: (() => Promise<REnumFieldLoadedChoice[]>) | undefined\n): VNode => {\n const t = useI18n()\n const renderableFieldType = typeAndFormatToResourcefulFieldType(schema.type, schema.format)\n let renderMode: CommonResourcefulFieldPublicProps['renderMode'] =\n mode === 'read' ? 'read' : 'edit'\n if (renderMode === 'edit') {\n /**\n * Force rendering of autocreated/autoupdated/immutable/primary-key fields as read-only\n */\n if (\n mode === 'create' &&\n (schema['x-resourceful-autocreated'] || schema['x-resourceful-primary-key'])\n ) {\n renderMode = 'read'\n }\n if (\n mode === 'update' &&\n (schema['x-resourceful-autoupdated'] || schema['x-resourceful-immutable'])\n ) {\n renderMode = 'read'\n }\n }\n const commonProps: CommonResourcefulFieldPublicProps = {\n renderMode,\n multiple: validator.type === 'array',\n choices: undefined,\n allowUnspecifiedChoices: false,\n density: display.xs ? 'compact' : display.lgAndUp ? 'default' : 'comfortable',\n ...bindings.value,\n }\n if (schema['x-resourceful-relationship']) {\n commonProps.label = schema['x-resourceful-relationship'].title\n commonProps.multiple = schema['x-resourceful-relationship'].multiple\n if (Array.isArray(schema['x-resourceful-relationship'].choices)) {\n commonProps.choices = schema['x-resourceful-relationship'].choices\n }\n } else if ('x-resourceful-choices' in schema && Array.isArray(schema['x-resourceful-choices'])) {\n commonProps.choices = schema['x-resourceful-choices'].map((c) => ({\n value: c.value,\n label: c.i18n ? t(c.title || c.value) : c.title || c.value,\n }))\n }\n if (\n validator.type !== 'array' &&\n (schema['x-resourceful-relationship'] ||\n ('x-resourceful-choices' in schema && Array.isArray(schema['x-resourceful-choices'])))\n ) {\n return h(REnumField, {\n // Field specifics\n clearable: schema.nullable || false,\n ...stripUndefinedValuesFromObject({\n doRefreshChoices,\n }),\n // Common props\n ...commonProps,\n } satisfies Partial<REnumFieldProps>)\n }\n switch (renderableFieldType) {\n case 'string':\n return h(RStringField, {\n // Field specifics\n format: schema.format as any,\n clearable: schema.nullable || false,\n // Common props\n ...commonProps,\n } satisfies Partial<RStringFieldProps>)\n case 'date':\n return h(RDateField, {\n // Field specifics\n clearable: schema.nullable || false,\n // Common props\n ...commonProps,\n } satisfies Partial<RDateFieldProps>)\n case 'dateTime':\n return h(RDateTimeField, {\n // Field specifics\n clearable: schema.nullable || false,\n // Common props\n ...commonProps,\n } satisfies Partial<RDateTimeFieldProps>)\n case 'binary':\n return h(DevErrorAlert, {})\n case 'number':\n return h(RNumberField, {\n // Field specifics\n min: schema.minimum,\n max: schema.maximum,\n step: schema.multipleOf,\n // Common props\n ...commonProps,\n } satisfies Partial<RNumberFieldProps>)\n case 'integer':\n return h(RIntegerField, {\n // Field specifics\n min: schema.minimum,\n max: schema.maximum,\n step: schema.multipleOf,\n // Common props\n ...commonProps,\n } satisfies Partial<RIntegerFieldProps>)\n case 'bigint':\n return h(RBigIntField, {\n // Field specifics\n min: schema.minimum,\n max: schema.maximum,\n step: schema.multipleOf,\n // Common props\n ...commonProps,\n } satisfies Partial<RBigIntFieldProps>)\n case 'unsignedInteger':\n return h(RUnsignedIntegerField, {\n // Field specifics\n min: schema.minimum,\n max: schema.maximum,\n step: schema.multipleOf,\n // Common props\n ...commonProps,\n } satisfies Partial<RUnsignedIntegerFieldProps>)\n case 'boolean':\n return h(RBooleanField, {\n // Field specifics\n choices: schema.nullable ? [true, false, null] : [true, false],\n // Common props\n ...commonProps,\n } satisfies Partial<RBooleanFieldProps>)\n default:\n return h(DevErrorAlert, {})\n }\n}\n"],"names":["joi","validator"],"mappings":"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"}
|