tracked-instance 1.0.19 → 1.0.21

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/README.md CHANGED
@@ -280,5 +280,6 @@ interface CollectionItem {
280
280
  isRemoved: Ref<boolean>
281
281
  isNew: Ref<boolean> //weather is new instance. Field can be changed manually or changed in loadData in second argument
282
282
  meta: Record<string, any>
283
+ remove: (isHardRemove?: boolean) => void
283
284
  }
284
285
  ```
package/dist/index.mjs CHANGED
@@ -1675,39 +1675,45 @@ function useTrackedInstance(initialData) {
1675
1675
  }
1676
1676
 
1677
1677
  // src/collection.ts
1678
- import { computed as computed2, ref, shallowRef, triggerRef } from "vue";
1678
+ import { computed as computed2, markRaw, ref } from "vue";
1679
1679
  var useCollection = (createItemMeta = () => void 0) => {
1680
- const items = shallowRef([]);
1680
+ const items = ref([]);
1681
1681
  const isDirty = computed2(
1682
- () => items.value.some(({ instance, isRemoved, isNew }) => instance.isDirty.value || isNew.value || isRemoved.value)
1682
+ () => items.value.some(({
1683
+ instance,
1684
+ isRemoved,
1685
+ isNew
1686
+ }) => instance.isDirty.value || isNew.value || isRemoved.value)
1683
1687
  );
1684
1688
  const createItem = (item, isNew) => {
1685
1689
  const instance = useTrackedInstance(item);
1686
- return {
1690
+ const collectionItem = markRaw({
1687
1691
  isRemoved: ref(false),
1688
1692
  isNew: ref(isNew),
1689
1693
  instance,
1690
- meta: createItemMeta(instance)
1691
- };
1694
+ meta: createItemMeta(instance),
1695
+ remove: (isHardRemove = false) => {
1696
+ const index = items.value.indexOf(collectionItem);
1697
+ remove(index, isHardRemove);
1698
+ }
1699
+ });
1700
+ return collectionItem;
1692
1701
  };
1693
1702
  const add = (item, index = items.value.length) => {
1694
1703
  const newItem = createItem(item, true);
1695
1704
  items.value.splice(index, 0, newItem);
1696
- triggerRef(items);
1697
1705
  return newItem;
1698
1706
  };
1699
1707
  const remove = (index, isHardRemove = false) => {
1700
1708
  const item = items.value[index];
1701
1709
  if (item.isNew.value || isHardRemove) {
1702
1710
  items.value.splice(index, 1);
1703
- triggerRef(items);
1704
1711
  } else {
1705
1712
  items.value[index].isRemoved.value = true;
1706
1713
  }
1707
1714
  };
1708
1715
  const loadData = (loadedItems) => {
1709
1716
  items.value = loadedItems.map((item) => createItem(item, false));
1710
- triggerRef(items);
1711
1717
  };
1712
1718
  const reset = () => {
1713
1719
  items.value = items.value.filter(({ isNew }) => !isNew.value);
@@ -1715,7 +1721,6 @@ var useCollection = (createItemMeta = () => void 0) => {
1715
1721
  item.isRemoved.value = false;
1716
1722
  item.instance.reset();
1717
1723
  }
1718
- triggerRef(items);
1719
1724
  };
1720
1725
  return {
1721
1726
  items,
@@ -1,13 +1,14 @@
1
- import { ComputedRef, Ref, ShallowRef } from 'vue';
1
+ import { ComputedRef, Raw, Ref } from 'vue';
2
2
  import { TrackedInstance } from './tracked-instance';
3
- export interface CollectionItem<Item, Meta = undefined> {
3
+ export type CollectionItem<Item, Meta = undefined> = Raw<{
4
4
  instance: TrackedInstance<Item>;
5
5
  meta: Meta;
6
6
  isRemoved: Ref<boolean>;
7
7
  isNew: Ref<boolean>;
8
- }
8
+ remove: (isHardRemoved?: boolean) => void;
9
+ }>;
9
10
  export interface Collection<Item, Meta = undefined> {
10
- items: ShallowRef<CollectionItem<Item, Meta>[]>;
11
+ items: Ref<CollectionItem<Item, Meta>[]>;
11
12
  isDirty: ComputedRef<boolean>;
12
13
  add: (item: Item, afterIndex?: number) => CollectionItem<Item, Meta>;
13
14
  remove: (index: number, isHardRemove?: boolean) => void;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tracked-instance",
3
- "version": "1.0.19",
3
+ "version": "1.0.21",
4
4
  "description": "Build large forms and track all changes",
5
5
  "type": "module",
6
6
  "scripts": {