Check for default values

This commit is contained in:
rijkvanzanten
2020-10-26 11:14:35 +01:00
parent 84939b4d54
commit ca297dda3a
3 changed files with 34 additions and 7 deletions

View File

@@ -16,6 +16,20 @@ export function useCollection(collectionKey: string | Ref<string>) {
return fieldsStore.getFieldsForCollection(collection.value);
});
const defaults = computed(() => {
if (!fields.value) return {};
const defaults: Record<string, any> = {};
for (const field of fields.value) {
if (field.schema?.default_value) {
defaults[field.field] = field.schema.default_value;
}
}
return defaults;
});
const primaryKeyField = computed(() => {
// Every collection has a primary key; rules of the land
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
@@ -32,5 +46,5 @@ export function useCollection(collectionKey: string | Ref<string>) {
return info.value?.meta?.sort_field || null;
});
return { info, fields, primaryKeyField, userCreatedField, sortField };
return { info, fields, defaults, primaryKeyField, userCreatedField, sortField };
}

View File

@@ -16,7 +16,7 @@ export function useItem(collection: Ref<string>, primaryKey: Ref<string | number
const saving = ref(false);
const deleting = ref(false);
const archiving = ref(false);
const edits = ref({});
const edits = ref<Record<string, any>>({});
const isNew = computed(() => primaryKey.value === '+');
const isBatch = computed(() => typeof primaryKey.value === 'string' && primaryKey.value.includes(','));
const isSingle = computed(() => !!collectionInfo.value?.meta?.singleton);

View File

@@ -267,7 +267,7 @@ export default defineComponent({
const revisionsDrawerDetail = ref<Vue | null>(null);
const { info: collectionInfo, primaryKeyField } = useCollection(collection);
const { info: collectionInfo, defaults, primaryKeyField } = useCollection(collection);
const {
isNew,
@@ -288,11 +288,24 @@ export default defineComponent({
validationErrors,
} = useItem(collection, primaryKey);
const hasEdits = computed<boolean>(() => Object.keys(edits.value).length > 0);
const hasEdits = computed(() => Object.keys(edits.value).length > 0);
const isSavable = computed<boolean>(
() => saveAllowed.value === true && (hasEdits.value === true || isNew.value === true)
);
const isSavable = computed(() => {
if (saveAllowed.value === false) return false;
if (
!primaryKeyField.value?.schema?.has_auto_increment &&
!primaryKeyField.value?.meta?.special?.includes('uuid')
) {
return !!edits.value?.[primaryKeyField.value.field];
}
if (isNew.value === true) {
return Object.keys(defaults.value).length > 0 || hasEdits.value;
}
return hasEdits.value;
});
const confirmDelete = ref(false);
const confirmArchive = ref(false);