Skip to content

Instantly share code, notes, and snippets.

View malerba118's full-sized avatar

Austin Malerba malerba118

View GitHub Profile
@malerba118
malerba118 / fetch-todos.js
Created February 17, 2019 00:27
Fetching Todos
const useNormalizedApi = () => {
let db = useDB();
return {
...
fetchTodos: async () => {
let todos = await api.fetchTodos();
let { result, entities } = normalize(
todos,
apiSchemas.fetchTodosResponseSchema
@malerba118
malerba118 / update-todo.js
Created February 17, 2019 00:28
Updating a Todo
const useNormalizedApi = () => {
let db = useDB();
return {
...
updateTodo: async (id, payload) => {
let todo = await api.updateTodo(id, payload);
let { result, entities } = normalize(
todo,
apiSchemas.updateTodoResponseSchema
@malerba118
malerba118 / create-todo.js
Created February 17, 2019 00:30
Creating a Todo
const useNormalizedApi = () => {
let db = useDB();
return {
...
addTodo: async (text) => {
let todo = await api.addTodo(text);
let { result, entities } = normalize(
todo,
apiSchemas.addTodoResponseSchema
@malerba118
malerba118 / delete-todo.js
Created February 17, 2019 00:32
Deleting a Todo
const useNormalizedApi = () => {
let db = useDB();
return {
...
deleteTodo: async (id) => {
let todo = await api.deleteTodo(id);
let { result, entities } = normalize(
todo,
apiSchemas.deleteTodoResponseSchema
@malerba118
malerba118 / optimistic-update.js
Last active February 17, 2019 05:00
Optimistic Updates
const useNormalizedApi = () => {
let db = useDB();
return {
...
updateTodo: async (id, payload, oldTodo) => {
// Let's assume the update will be successful
let normalizedTodoData = normalize(payload, TodoSchema);
db.mergeEntities(normalizedTodoData.entities);
try {
@malerba118
malerba118 / other-query.js
Created February 17, 2019 00:35
Other Queries
const queries = {
getTodoById: (id) => {
return {
schema: TodoSchema,
value: id
};
}
};
const TodoDetailComponent = (props) => {
@malerba118
malerba118 / normalizr-response.js
Created February 19, 2019 23:34
Example response data
let todosResponse = {
"status": 200,
"body": [{
"id": 32,
"text": "Buy cheese",
"completed": false,
"author": {
"id": 38,
"name": "Leanne Graham",
"email": "[email protected]"
@malerba118
malerba118 / normailzr-schemas.js
Last active February 20, 2019 15:18
Normalizr schemas
import { schema } from 'normalizr';
const UserSchema = new schema.Entity(
"User",
{},
{ idAttribute: "id" }
);
const TodoSchema = new schema.Entity(
"Todo",
@malerba118
malerba118 / normalize.js
Last active February 20, 2019 15:26
Normalize
import { normalize } from 'normalizr';
let normalizeData = normalize(todosResponse, responseSchema);
console.log(normalizedData);
// Outputs:
// {
// "entities": {
// "User": {
// "38": {
@malerba118
malerba118 / denormalize.js
Last active February 20, 2019 15:48
Denormalize
import { denormalize } from 'normalizr';
let denormalizedData = denormalize(
normalizedData.result,
responseSchema,
normalizedData.entities
);
console.log(denormalizedData);
// Outputs