Skip to content

Commit 6aeb5d6

Browse files
committed
add toggleState feature
1 parent 70936e8 commit 6aeb5d6

File tree

8 files changed

+34
-8
lines changed

8 files changed

+34
-8
lines changed

src/For.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import {h} from "./parser.js";
22

3-
export function For({ each, effect, getKey = (item) => item.id || item.name, tag = 'ext-container', attributes = {} }) {
3+
export default function For({ each, effect, getKey = (item) => item.id || item.name, tag = 'ext-container', attributes = {} }) {
44
function onInitialize(component) {
55
const childStateMap = new Map(); // Mappa per gestire lo stato dei figli
66

src/conditionalState.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import {createDerivedState} from "./createDerivedState.js";
1+
import createDerivedState from "./createDerivedState.js";
22

33
export default function conditionalState(state, trueValue = true, falseValue = false) {
44
return createDerivedState(() => state() ? trueValue : falseValue);

src/createDerivedState.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { setActiveTracker } from './dependencyTracker.js';
22
import { createState } from './createState.js';
33

4-
export function createDerivedState(transformer, sync = false, ...args) {
4+
export default function createDerivedState(transformer, sync = false, ...args) {
55
const dependencies = new Set();
66

77
const trackingWrapper = (...args) => {

src/createState.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ export function createState(initialValue, context = null, treatAsSingleEntity =
6565
}
6666
}
6767
};
68+
getState.$$setState = setState;
6869

6970
const applyState = (newValue) => {
7071
let hasChanges = false;
@@ -125,6 +126,7 @@ export function createState(initialValue, context = null, treatAsSingleEntity =
125126
return state[key];
126127
};
127128
propertyGetter.$$isState = true;
129+
propertyGetter.$$setState = setState[key];
128130
propertyGetter.$$subscribe = listener => {
129131
propertyListeners[key].add(listener);
130132
return () => propertyListeners[key].delete(listener);

src/index.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,13 @@ import createRef from "./createRef.js";
66
import createExtRef from "./createExtRef.js";
77
import createEffect from "./createEffect.js";
88
import createPropertyObserver from "./createPropertyObserver.js";
9-
import {createDerivedState} from "./createDerivedState.js";
9+
import createDerivedState from "./createDerivedState.js";
1010
import conditionalState from "./conditionalState.js";
11-
import {For} from "./For.js";
11+
import toggleState from "./toggleState.js";
12+
import For from "./For.js";
1213
export {
1314
h, generateHtmlClass, initialize, destroy, createState, createRef, createExtRef, createEffect, createDerivedState,
14-
defineExtClass, createPropertyObserver, For, conditionalState
15+
defineExtClass, createPropertyObserver, For, conditionalState, toggleState
1516
};
1617

1718
try {

src/toggleState.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
export default function toggleState(state) {
2+
return state.$$setState(currentState => !currentState);
3+
}

test/createDerivedState.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import assert from 'assert';
2-
import { createDerivedState } from "../src/createDerivedState.js";
3-
import { createState } from "../src/createState.js";
2+
import { createState, createDerivedState } from "../src/index.js";
43

54
describe('createDerivedState', function () {
65

test/toggleState.js

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import {createState, toggleState} from "../src/index.js";
2+
import assert from "node:assert";
3+
4+
describe('toggleState', function () {
5+
it('a single state set to false should change using toggleState to true', function () {
6+
const [myState] = createState(false, null, false, true);
7+
toggleState(myState);
8+
assert.equal(myState(), true);
9+
toggleState(myState);
10+
assert.equal(myState(), false);
11+
});
12+
13+
it('a single state set to false should change using toggleState to true', function () {
14+
const [{ done, text }, ] = createState({ done: false, text: 'Hello' });
15+
toggleState(done);
16+
assert.equal(text(), 'Hello');
17+
assert.equal(done(), true);
18+
toggleState(done);
19+
assert.equal(done(), false);
20+
});
21+
})

0 commit comments

Comments
 (0)