Conditional
Use if_ function to handle conditional rendering:
conditional-if.js :
import Component from './node_modules/@xylem-js/xylem-js/dom/Component.js';
import createStore from './node_modules/@xylem-js/xylem-js/core/createStore.js';
import if_ from './node_modules/@xylem-js/xylem-js/dom/if_.js';
import mountComponent from './node_modules/@xylem-js/xylem-js/dom/mountComponent.js';
import parseHTML from './node_modules/@xylem-js/xylem-js/dom/parseHTML.js';
class ConditionalIf extends Component
{
build()
{
const showContent$ = createStore(true);
return parseHTML([
'<div>',
[
'<button>', {
type: 'button',
'@click': () => showContent$._(!showContent$._()),
},
[
'Toggle',
],
'</button>',
],
'</div>',
if_(showContent$, () => {
return parseHTML([
'<div>',
[
'The quick brown fox jumps over the lazy dog',
],
'</div>',
]);
}).endIf(),
]);
}
}
mountComponent(new ConditionalIf(), document.getElementById('app-container'));
JSX version of the above code:
conditional-if-jsx.tsx :
import Component from './node_modules/@xylem-js/xylem-js/dom/Component.js';
import createStore from './node_modules/@xylem-js/xylem-js/core/createStore.js';
import if_ from './node_modules/@xylem-js/xylem-js/dom/if_.js';
import mountComponent from './node_modules/@xylem-js/xylem-js/dom/mountComponent.js';
class ConditionalIf extends Component
{
build()
{
const showContent$ = createStore(true);
return <>
<div>
{ if_(showContent$, () => {
return <>
<div>
Click to hide me → {}
<button
type="button"
on:click={() => showContent$._(false)}
>
Hide
</button>
</div>
]);
}).endIf() }
</div>
</>;
}
}
mountComponent(new ConditionalExample(), document.getElementById('app-container'));
Note: Remember to chain if_() with endif() at the end.
Use else() to show content when previous if is false:
conditional-if-else.js :
import Component from './node_modules/@xylem-js/xylem-js/dom/Component.js';
import createStore from './node_modules/@xylem-js/xylem-js/core/createStore.js';
import if_ from './node_modules/@xylem-js/xylem-js/dom/if_.js';
import map from './node_modules/@xylem-js/xylem-js/core/map.js';
import mountComponent from './node_modules/@xylem-js/xylem-js/dom/mountComponent.js';
import parseHTML from './node_modules/@xylem-js/xylem-js/dom/parseHTML.js';
class ConditionalIfElse extends Component
{
build()
{
const isArchived$ = createStore(false);
return parseHTML([
'<div>',
[
'To-do list:',
'<ol>',
[
'<li>',
[
if_(isArchived$, () => {
return parseHTML([
'<del>', ['Buy Vegetables'], '</del>',
]);
}).else(() => {
return parseHTML([
'Buy Vegetables',
]);
}).endIf(),
' ',
'<button>', {
'@click': () => isArchived$._(!isArchived$._()),
},
[ map(isArchived$, v => v ? 'Unarchive' : 'Archive') ],
'</button>',
],
'</li>',
],
'</ol>',
],
'</div>',
]);
}
}
mountComponent(new ConditionalIfElse(), document.getElementById('app-container'));
JSX version of the above code:
conditional-if-else-jsx.tsx :
import Component from './node_modules/@xylem-js/xylem-js/dom/Component.js';
import createStore from './node_modules/@xylem-js/xylem-js/core/createStore.js';
import if_ from './node_modules/@xylem-js/xylem-js/dom/if_.js';
import map from './node_modules/@xylem-js/xylem-js/core/map.js';
import mountComponent from './node_modules/@xylem-js/xylem-js/dom/mountComponent.js';
class ConditionalIfElse extends Component
{
build()
{
const isArchived$ = createStore(false);
return <>
<div>
To-do list:
<ol>
<li>
{ if_(isArchived$, () => {
return <>
<del>Buy Vegetables</del>
</>;
}).else(() => {
return <>
Buy Vegetables
</>;
}).endIf() }
{' '}
<button
on:click={() => isArchived$._(!isArchived$._())}
>
{ map(isArchived$, v => v ? 'Unarchive' : 'Archive') }
</button>
</li>
</ol>
</div>
</>;
}
}
mountComponent(new ConditionalIfElse(), document.getElementById('app-container')!);