26 lines
560 B
JavaScript
26 lines
560 B
JavaScript
export function createLatchedDraftState(allowedKeys) {
|
|
const allowed = new Set(allowedKeys);
|
|
const modified = new Set();
|
|
|
|
return Object.freeze({
|
|
mark(key) {
|
|
if (!allowed.has(key)) throw new Error(`Unknown draft field: ${key}`);
|
|
const wasModified = modified.has(key);
|
|
modified.add(key);
|
|
return !wasModified;
|
|
},
|
|
clear() {
|
|
modified.clear();
|
|
},
|
|
has(key) {
|
|
return modified.has(key);
|
|
},
|
|
get dirty() {
|
|
return modified.size > 0;
|
|
},
|
|
keys() {
|
|
return [...modified];
|
|
},
|
|
});
|
|
}
|