Skip to content

Instantly share code, notes, and snippets.

View perjo927's full-sized avatar
🧑‍💻

Per Jonsson perjo927

🧑‍💻
  • DevCode
  • Stockholm, Sweden
View GitHub Profile
@perjo927
perjo927 / main.css
Created September 8, 2020 16:43
Styling
body {
font: 14px "Helvetica Neue", Helvetica, Arial, sans-serif;
line-height: 14px;
background: #f5f5f5;
color: #4d4d4d;
margin: 1em;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
font-weight: 300;
display: flex;
@perjo927
perjo927 / view-logic.js
Created September 8, 2020 16:42
View Logic
export const getAndResetInput = (e) => {
const [input] = e.target;
const { value } = input;
input.value = "";
return value;
};
export const maybeRender = (template, validator) =>
validator ? template : null;
@perjo927
perjo927 / business-logic.js
Created September 8, 2020 16:38
Business Logic
import { CONSTS } from "../redux/actions/index.js";
const { ALL, DONE, IN_PROGRESS } = CONSTS.visibilityFilters;
export const makeRegrettable = (store, actions) => ({
undo() {
return store.dispatch(actions.undo());
},
redo() {
return store.dispatch(actions.redo());
@perjo927
perjo927 / compose.js
Created September 8, 2020 16:22
Compose
export const compose = (...functions) => (argToComposedFunction) =>
functions.reduceRight(
(accumulatedValue, func) => func(accumulatedValue),
argToComposedFunction
);
@perjo927
perjo927 / App.js
Created September 8, 2020 16:15
App Template
import { html } from "lit-html";
import { Input } from "./Input";
import { TodoList } from "./TodoList";
import { ListManager } from "./ListManager";
import { Undo } from "./Undo";
import { Redo } from "./Redo";
import { getTodoItem } from "../factories/todo/index";
import {
getStoreMethods,
getTodos,
@perjo927
perjo927 / ListManager.js
Created September 8, 2020 16:07
List Manager Template
import { html } from "lit-html";
import { CONSTS } from "../redux/actions/index";
const { ALL, DONE, IN_PROGRESS } = CONSTS.visibilityFilters;
const filterAll = { filter: ALL, text: "All" };
const filterDone = { filter: DONE, text: "Done" };
const filterInProgress = {
filter: IN_PROGRESS,
text: "In Progress",
@perjo927
perjo927 / Redo.js
Created September 8, 2020 16:03
Redo Template
import { html } from "lit-html";
export const Redo = ({ disabled, onClick }) => {
const className = `${disabled ? "disabled" : ""}`;
const onRedo = disabled ? () => {} : onClick;
return html`
<div class=${className} @click=${onRedo}>
<svg
xmlns="http://www.w3.org/2000/svg"
@perjo927
perjo927 / Undo.js
Created September 8, 2020 16:01
Undo Template
import { html } from "lit-html";
export const Undo = ({ disabled, onClick }) => {
const className = `${disabled ? "disabled" : ""}`;
const onUndo = disabled ? () => {} : onClick;
return html`
<div class=${className} @click=${onUndo}>
<svg
xmlns="http://www.w3.org/2000/svg"
@perjo927
perjo927 / Input.js
Created September 8, 2020 15:59
Input Template
import { html } from "lit-html";
export const Input = ({ onSubmit }) => html`
<form
@submit=${(e) => {
e.preventDefault();
onSubmit(e);
}}
>
<input placeholder="What needs to be done?" autofocus="" />
@perjo927
perjo927 / TodoList.js
Created September 8, 2020 15:57
TodoList template
import { html } from "lit-html";
const Todo = ({ onToggleClick, onDeleteClick, text, done }) => {
const toggleClass = "todo toggle";
const deleteClass = "todo delete";
const textClass = `todo text ${done ? " done" : ""}`;
const checkMark = done ? "✔" : "";
return html`
<li>