Skip to content
This repository has been archived by the owner on Sep 26, 2022. It is now read-only.

Commit

Permalink
fix: fixed Class action
Browse files Browse the repository at this point in the history
  • Loading branch information
TheComputerM committed Sep 9, 2020
1 parent 9444b20 commit ad0f65f
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 8 deletions.
20 changes: 12 additions & 8 deletions packages/svelte-materialify/src/internal/Class/index.js
Original file line number Diff line number Diff line change
@@ -1,17 +1,21 @@
const filter = (classes) => classes.filter((x) => !!x);
const format = (classes) => classes.split(' ').filter((x) => !!x);

/**
* @param node {Element}
* @param classes {Array<string>}
*/
export default (node, classes) => {
classes.forEach((klass) => {
if (klass) node.classList.add(klass);
});
export default (node, _classes) => {
let classes = _classes;
node.classList.add(...format(filter(classes).join(' ')));
return {
update(newClasses) {
newClasses.forEach((klass) => {
if (klass) node.classList.add(klass);
else node.classList.remove(klass);
update(_newClasses) {
const newClasses = _newClasses;
newClasses.forEach((klass, i) => {
if (klass) node.classList.add(...format(klass));
else if (classes[i]) node.classList.remove(...format(classes[i]));
});
classes = newClasses;
},
};
};
26 changes: 26 additions & 0 deletions packages/svelte-materialify/tests/internal/spec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import Class from '@s/internal/Class';

describe('internal actions', () => {
test('Class', () => {
document.body.appendChild(document.createElement('div'));

const div = document.querySelector('div');
const { classList } = div;

const initial = [true && 'a', false && 'b'];
const { update } = Class(div, initial);
expect(classList.contains('a')).toBe(true);

update([true && 'a', true && 'b']);
expect(classList.contains('a')).toBe(true);
expect(classList.contains('b')).toBe(true);

update([false && 'a', true && 'b']);
expect(classList.contains('b')).toBe(true);
expect(classList.contains('a')).toBe(false);

update([false && 'a', false && 'b']);
expect(classList.contains('a')).toBe(false);
expect(classList.contains('b')).toBe(false);
});
});

0 comments on commit ad0f65f

Please sign in to comment.