|
@@ -0,0 +1,55 @@
|
|
|
+import XEUtils from "xe-utils";
|
|
|
+
|
|
|
+type CodeType<T> = keyof T & string | ((item: T) => string);
|
|
|
+
|
|
|
+export default function useList<T = any>(opt: {
|
|
|
+ value: T[];
|
|
|
+ key: CodeType<T>;
|
|
|
+ errMsg: ((item: T) => string) | string
|
|
|
+} | T[]) {
|
|
|
+
|
|
|
+ let trackProxy = () => {
|
|
|
+ }
|
|
|
+ let triggerProxy = () => {
|
|
|
+ }
|
|
|
+
|
|
|
+ let list = []
|
|
|
+
|
|
|
+ if (XEUtils.isArray(opt)) {
|
|
|
+ list = opt
|
|
|
+ }
|
|
|
+
|
|
|
+ if (XEUtils.isObject(opt)) {
|
|
|
+ if (Array.isArray(opt.value)) {
|
|
|
+ list = value
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ const proxy = new Proxy(list, {
|
|
|
+ get(target, key) {
|
|
|
+ trackProxy()
|
|
|
+ return target[key];
|
|
|
+ },
|
|
|
+ set(target: any[], p: string | symbol, newValue: any, receiver: any): boolean {
|
|
|
+ target[p] = newValue;
|
|
|
+ triggerProxy()
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ return customRef((track, trigger) => {
|
|
|
+ trackProxy = track;
|
|
|
+ triggerProxy = XEUtils.debounce(trigger);
|
|
|
+ return {
|
|
|
+ get() {
|
|
|
+ track()
|
|
|
+ return proxy
|
|
|
+ },
|
|
|
+ set(value) {
|
|
|
+ proxy.length = 0;
|
|
|
+ proxy.push(...value)
|
|
|
+ trigger()
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+}
|