diff --git a/src/lib/form/base-form.component.ts b/src/lib/form/base-form.component.ts index ab9dc1c..c1baa60 100644 --- a/src/lib/form/base-form.component.ts +++ b/src/lib/form/base-form.component.ts @@ -5,7 +5,7 @@ import { hasFormChanged } from '../utils'; @Directive() export abstract class BaseFormComponent { form!: UntypedFormGroup; - initialFormValue!: Record; + initialFormValue!: Record; get changed(): boolean { return hasFormChanged(this.form, this.initialFormValue); diff --git a/src/lib/utils/functions.ts b/src/lib/utils/functions.ts index 948a20c..f6dbf18 100644 --- a/src/lib/utils/functions.ts +++ b/src/lib/utils/functions.ts @@ -41,36 +41,39 @@ export function trackByFactory, PrimaryKey exte return (_index: number, item: T): Id => item.id; } -export function hasFormChanged(form: UntypedFormGroup, initialFormValue: Record): boolean { - if (form && initialFormValue) { - for (const key of Object.keys(form.getRawValue())) { - const initialValue = initialFormValue[key]; - const updatedValue = form.get(key)?.value; +export function hasFormChanged(form: UntypedFormGroup, initialFormValue: Record): boolean { + if (!form || !initialFormValue) { + return false; + } - if (initialValue == null && updatedValue != null) { - const updatedValueType = typeof updatedValue; - if (updatedValueType !== 'string' && updatedValueType !== 'boolean') { - return true; - } else if (updatedValueType === 'string' && updatedValue.length > 0) { - return true; - } else if (updatedValueType === 'boolean' && updatedValue === true) { + for (const key of Object.keys(form.getRawValue())) { + const initialValue = initialFormValue[key]; + const updatedValue = form.get(key)?.value; + + if (initialValue === null && updatedValue !== null) { + const updatedValueType = typeof updatedValue; + if (updatedValueType !== 'string' && updatedValueType !== 'boolean') { + return true; + } else if (updatedValueType === 'string' && updatedValue.length > 0) { + return true; + } else if (updatedValueType === 'boolean' && updatedValue === true) { + return true; + } + } else if (initialValue !== updatedValue) { + if (Array.isArray(updatedValue)) { + if (JSON.stringify(initialValue) !== JSON.stringify(updatedValue)) { return true; } - } else if (initialValue !== updatedValue) { - if (Array.isArray(updatedValue)) { - if (JSON.stringify(initialValue) !== JSON.stringify(updatedValue)) { - return true; - } - } else if (updatedValue instanceof dayjs) { - if (!(updatedValue as Dayjs).isSame(dayjs(initialValue), 'day')) { - return true; - } - } else { + } else if (updatedValue instanceof dayjs && typeof initialValue === 'string') { + if (!(updatedValue as Dayjs).isSame(dayjs(initialValue), 'day')) { return true; } + } else { + return true; } } } + return false; }