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 +1 -0
- package/dist/index.mjs +15 -10
- package/dist/types/collection.d.ts +5 -4
- package/package.json +1 -1
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,
|
|
1678
|
+
import { computed as computed2, markRaw, ref } from "vue";
|
|
1679
1679
|
var useCollection = (createItemMeta = () => void 0) => {
|
|
1680
|
-
const items =
|
|
1680
|
+
const items = ref([]);
|
|
1681
1681
|
const isDirty = computed2(
|
|
1682
|
-
() => items.value.some(({
|
|
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
|
-
|
|
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,
|
|
1
|
+
import { ComputedRef, Raw, Ref } from 'vue';
|
|
2
2
|
import { TrackedInstance } from './tracked-instance';
|
|
3
|
-
export
|
|
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:
|
|
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;
|