initial map support

pull/11774/head
godzylinux 2 years ago
parent 34447e851f
commit f86fa6eed2

@ -1,16 +1,34 @@
import { make_reactive } from './utils.js';
export const ReactiveMap = make_reactive(Map, {
mutation_properties: ['clear', 'delete', 'set'],
write_properties: ['clear', 'delete', 'set'],
read_properties: ['get', 'keys', 'size', 'entries', 'values'],
interceptors: {
set: (value, property, ...params) => {
return value.get(params[0]) !== params[2] || params[2] !== undefined;
set: (notify_read_methods, value, property, ...params) => {
if (value.get(params[0]) === params[1] && params[1] !== undefined) {
return false;
}
if (!value.has(params[0])) {
notify_read_methods(['keys', 'size']);
}
notify_read_methods(['entries', 'values']);
notify_read_methods(['get'], params[1]);
return true;
},
clear: (value, property, ...params) => {
return value.size !== 0;
clear: (notify_read_methods, value, property, ...params) => {
if (value.size === 0) {
return false;
}
notify_read_methods(['keys', 'size', 'values', 'entries']);
return true;
},
delete: (value, property, ...params) => {
return value.has(params[0]);
delete: (notify_read_methods, value, property, ...params) => {
if (!value.has(params[0])) {
return false;
}
notify_read_methods(['get'], value.get(params[0]));
notify_read_methods(['keys', 'size', 'values', 'entries']);
return true;
}
}
});

@ -153,7 +153,7 @@ const get_signal_for_function = (signals_map, function_name, param) => {
}
/**
* @type {import("#client").Source<boolean>>}
* @type {import("#client").Source<boolean>}
*/
let signal;
if (!params_to_signal_map.has(param)) {
@ -171,9 +171,9 @@ const get_signal_for_function = (signals_map, function_name, param) => {
/**
* toggles the signal value. this change notifies any reactions (not using number explicitly cause its not required, change from true to false or vice versa is enough).
* @param {import("#client").Source<boolean>} version_signal
* @param {import("#client").Source<boolean>} [function_signal]
* @param {import("#client").Source<boolean>} [read_method_signal]
*/
const increment_signal = (version_signal, function_signal) => {
const increment_signal = (version_signal, read_method_signal) => {
set(version_signal, !version_signal.v);
function_signal && set(function_signal, !function_signal.v);
read_method_signal && set(read_method_signal, !read_method_signal.v);
};

Loading…
Cancel
Save