useRevertible.js 574 B

12345678910111213141516171819
  1. export function useRevertible(initialValue) {
  2. const original = ref()
  3. const model = ref()
  4. const editedFields = computed(() => findUpdated(original.value, model.value))
  5. const isEdited = computed(() => !_isEmpty(editedFields.value))
  6. const revert = () => (model.value = original.value)
  7. // TODO: notify on change
  8. watch(
  9. initialValue,
  10. (newValue) => {
  11. original.value = _clone(toValue(newValue))
  12. model.value = _clone(toValue(newValue))
  13. },
  14. { deep: true, immediate: true }
  15. )
  16. return { original, model, editedFields, isEdited, revert }
  17. }