Skip to content

Latest commit

History

12 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

ReduxUtils

arrayify

Arrayify is a simple utility that checks to see if the data passed to it is an array. If the data is an array it returns the data as is. If the data is not an array it returns the data wrapped in an array. If the data is null or undefined it returns an empty array.

Usage:

import {arrayify} from ReduxUtils
const car = {
make: 'Toyota'
model: 'Tacoma'
year: 2015
}
const cars = arrayify(car) // cars is an array [car]
const cars2 = arrayify([car]) // cars2 is an array [car]
const cars3 = arrayify(null) // cars3 is an empty array []

createReducer

createReducer is a simple function that is a part of lots of redux libraries. It simplifies the boilerplate for creating reducers.

Usage:

import {createReducer} from ReduxUtils
const carReducer = createReducer({}, {
['PUT_CAR']: (state, action) => action.payload.car,
})

ReducerFactories

ReducerFactories are a powerful state normalization abstraction that really allows you to create very clean and simple reducers. The reducer factories use normalizr to normalize the data and simplify the boilerplate needed to put list data into redux.

putIds

This function puts the normalized IDs into the state as an array

putIds (payloadEntityName: string, schema: Object)
const exampleAction = {
type: 'PUT_ENTITIES',
payload: { entities },
receivedAt: Date.now()
}

putEntities

This function puts the normalized entity objects into the state as an array

putEntities(payloadEntityName: string, schema: Object)
const exampleAction = {
type: 'PUT_ENTITIES',
payload: { entities },
receivedAt: Date.now()
}

eraseAllIds

This function wipes out the ids array from the state essentially deleting the normalized data

eraseAllIds()
const exampleAction = {
type: 'DELETE_ALL_ENTITIES',
receivedAt: Date.now()
}

eraseId

This function eliminates a single ID from the normalized IDs array. It assumes the ID you want exists as a property on the action payload (action.payload.id)

eraseId() // assumes id is in the action payload.
const exampleAction = {
type: 'DELETE_ENTITY',
payload: { id: 32 },
receivedAt: Date.now()
}

isRefreshing

This function can be used to update an isRefreshing flag for the data set. It assumes the isRefreshing property exists on the action payload.

isRefreshing()
const exampleAction = {
type: 'SET_IS_REFRESHING',
payload: { isRefreshing: true },
receivedAt: Date.now()
}

lastUpdated

This function sets a timestamp for the last time a data element was updated. It is looking for the receivedAt property on the action.

lastUpdated() // pulls time from action.receivedAt
const exampleAction = {
type: 'PUT_ENTITIES',
receivedAt: Date.now()
}

See the following example reducer that uses these factories:

import { putIds,
putEntities, eraseAllIds, eraseId, isRefreshing, lastUpdated, createReducer,
GenericSchema
} from ReduxUtils
const idsReducer = createReducer([], {
['PUT_SOME_ENTITY']: putIds('entities', GenericSchema),
})
const entitiesReducer = createReducer({}, {
['PUT_SOME_ENTITY']: putEntities('entities', GenericSchema),
})
const isRefreshingReducer = createReducer(false, {
['SOME_ENTITY_IS_REFRESHING']: isRefreshing()
})
const deleteReducer = createReducer(false, {
['SOME_ENTITY_DELETED']: eraseId()
})
const lastUpdatedReducer = createReducer('never', {
['PUT_SOME_ENTITY']: lastUpdated(),
['SOME_ENTITY_DELETED']: lastUpdated()
})
export const sampleStateEntry = combineReducers({
ids: idsReducer,
entities: entitiesReducer,
deleteEntity: deleteReducer,
isRefreshing: isRefreshingReducer,
lastUpdated: lastUpdatedReducer
})

GenericSchema

GenericSchema is very basic and simplified schema for normalizr. It assumes the action entity prop name is "entities"

NormalizedCollection

NormalizedCollection is a class that can be used to fetch normalized data in a selector.

Usage:

const entityCollection = new NormalizedCollection(entities, ids)
const items = entityCollection.getItems() // returns array of all items
const item = entityCollection.find(itemId) // returns the object by id

Example selectors:

import { NormalizedCollection } from 'ReduxUtils'
export function selectCarsCollection(state: Object): NormalizedCollection {
const {cars} = state
return new NormalizedCollection(cars.entities, cars.ids)
}
export function selectCarsList(state: Object): Array<Object> {
const Cars = selectCarsCollection(state)
return Cars.getItems()
}
export function selectCar(state: Object, carId: Number): Object {
const Cars = selectCarsCollection(state)
return Cars.find(carId)
}

Redux Utils is a few redux utilities that I created/co-created with @callmetwan (Anthony Garritano)

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GitHub - Digitova/ReduxUtils · GitHub
Skip to content

Latest commit

History

12 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

ReduxUtils

arrayify

Arrayify is a simple utility that checks to see if the data passed to it is an array. If the data is an array it returns the data as is. If the data is not an array it returns the data wrapped in an array. If the data is null or undefined it returns an empty array.

Usage:

import {arrayify} from ReduxUtils
const car = {
make: 'Toyota'
model: 'Tacoma'
year: 2015
}
const cars = arrayify(car) // cars is an array [car]
const cars2 = arrayify([car]) // cars2 is an array [car]
const cars3 = arrayify(null) // cars3 is an empty array []

createReducer

createReducer is a simple function that is a part of lots of redux libraries. It simplifies the boilerplate for creating reducers.

Usage:

import {createReducer} from ReduxUtils
const carReducer = createReducer({}, {
['PUT_CAR']: (state, action) => action.payload.car,
})

ReducerFactories

ReducerFactories are a powerful state normalization abstraction that really allows you to create very clean and simple reducers. The reducer factories use normalizr to normalize the data and simplify the boilerplate needed to put list data into redux.

putIds

This function puts the normalized IDs into the state as an array

putIds (payloadEntityName: string, schema: Object)
const exampleAction = {
type: 'PUT_ENTITIES',
payload: { entities },
receivedAt: Date.now()
}

putEntities

This function puts the normalized entity objects into the state as an array

putEntities(payloadEntityName: string, schema: Object)
const exampleAction = {
type: 'PUT_ENTITIES',
payload: { entities },
receivedAt: Date.now()
}

eraseAllIds

This function wipes out the ids array from the state essentially deleting the normalized data

eraseAllIds()
const exampleAction = {
type: 'DELETE_ALL_ENTITIES',
receivedAt: Date.now()
}

eraseId

This function eliminates a single ID from the normalized IDs array. It assumes the ID you want exists as a property on the action payload (action.payload.id)

eraseId() // assumes id is in the action payload.
const exampleAction = {
type: 'DELETE_ENTITY',
payload: { id: 32 },
receivedAt: Date.now()
}

isRefreshing

This function can be used to update an isRefreshing flag for the data set. It assumes the isRefreshing property exists on the action payload.

isRefreshing()
const exampleAction = {
type: 'SET_IS_REFRESHING',
payload: { isRefreshing: true },
receivedAt: Date.now()
}

lastUpdated

This function sets a timestamp for the last time a data element was updated. It is looking for the receivedAt property on the action.

lastUpdated() // pulls time from action.receivedAt
const exampleAction = {
type: 'PUT_ENTITIES',
receivedAt: Date.now()
}

See the following example reducer that uses these factories:

import { putIds,
putEntities, eraseAllIds, eraseId, isRefreshing, lastUpdated, createReducer,
GenericSchema
} from ReduxUtils
const idsReducer = createReducer([], {
['PUT_SOME_ENTITY']: putIds('entities', GenericSchema),
})
const entitiesReducer = createReducer({}, {
['PUT_SOME_ENTITY']: putEntities('entities', GenericSchema),
})
const isRefreshingReducer = createReducer(false, {
['SOME_ENTITY_IS_REFRESHING']: isRefreshing()
})
const deleteReducer = createReducer(false, {
['SOME_ENTITY_DELETED']: eraseId()
})
const lastUpdatedReducer = createReducer('never', {
['PUT_SOME_ENTITY']: lastUpdated(),
['SOME_ENTITY_DELETED']: lastUpdated()
})
export const sampleStateEntry = combineReducers({
ids: idsReducer,
entities: entitiesReducer,
deleteEntity: deleteReducer,
isRefreshing: isRefreshingReducer,
lastUpdated: lastUpdatedReducer
})

GenericSchema

GenericSchema is very basic and simplified schema for normalizr. It assumes the action entity prop name is "entities"

NormalizedCollection

NormalizedCollection is a class that can be used to fetch normalized data in a selector.

Usage:

const entityCollection = new NormalizedCollection(entities, ids)
const items = entityCollection.getItems() // returns array of all items
const item = entityCollection.find(itemId) // returns the object by id

Example selectors:

import { NormalizedCollection } from 'ReduxUtils'
export function selectCarsCollection(state: Object): NormalizedCollection {
const {cars} = state
return new NormalizedCollection(cars.entities, cars.ids)
}
export function selectCarsList(state: Object): Array<Object> {
const Cars = selectCarsCollection(state)
return Cars.getItems()
}
export function selectCar(state: Object, carId: Number): Object {
const Cars = selectCarsCollection(state)
return Cars.find(carId)
}

Redux Utils is a few redux utilities that I created/co-created with @callmetwan (Anthony Garritano)

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - Digitova/ReduxUtils · GitHub
Skip to content

Latest commit

History

12 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

ReduxUtils

arrayify

Arrayify is a simple utility that checks to see if the data passed to it is an array. If the data is an array it returns the data as is. If the data is not an array it returns the data wrapped in an array. If the data is null or undefined it returns an empty array.

Usage:

import {arrayify} from ReduxUtils
const car = {
make: 'Toyota'
model: 'Tacoma'
year: 2015
}
const cars = arrayify(car) // cars is an array [car]
const cars2 = arrayify([car]) // cars2 is an array [car]
const cars3 = arrayify(null) // cars3 is an empty array []

createReducer

createReducer is a simple function that is a part of lots of redux libraries. It simplifies the boilerplate for creating reducers.

Usage:

import {createReducer} from ReduxUtils
const carReducer = createReducer({}, {
['PUT_CAR']: (state, action) => action.payload.car,
})

ReducerFactories

ReducerFactories are a powerful state normalization abstraction that really allows you to create very clean and simple reducers. The reducer factories use normalizr to normalize the data and simplify the boilerplate needed to put list data into redux.

putIds

This function puts the normalized IDs into the state as an array

putIds (payloadEntityName: string, schema: Object)
const exampleAction = {
type: 'PUT_ENTITIES',
payload: { entities },
receivedAt: Date.now()
}

putEntities

This function puts the normalized entity objects into the state as an array

putEntities(payloadEntityName: string, schema: Object)
const exampleAction = {
type: 'PUT_ENTITIES',
payload: { entities },
receivedAt: Date.now()
}

eraseAllIds

This function wipes out the ids array from the state essentially deleting the normalized data

eraseAllIds()
const exampleAction = {
type: 'DELETE_ALL_ENTITIES',
receivedAt: Date.now()
}

eraseId

This function eliminates a single ID from the normalized IDs array. It assumes the ID you want exists as a property on the action payload (action.payload.id)

eraseId() // assumes id is in the action payload.
const exampleAction = {
type: 'DELETE_ENTITY',
payload: { id: 32 },
receivedAt: Date.now()
}

isRefreshing

This function can be used to update an isRefreshing flag for the data set. It assumes the isRefreshing property exists on the action payload.

isRefreshing()
const exampleAction = {
type: 'SET_IS_REFRESHING',
payload: { isRefreshing: true },
receivedAt: Date.now()
}

lastUpdated

This function sets a timestamp for the last time a data element was updated. It is looking for the receivedAt property on the action.

lastUpdated() // pulls time from action.receivedAt
const exampleAction = {
type: 'PUT_ENTITIES',
receivedAt: Date.now()
}

See the following example reducer that uses these factories:

import { putIds,
putEntities, eraseAllIds, eraseId, isRefreshing, lastUpdated, createReducer,
GenericSchema
} from ReduxUtils
const idsReducer = createReducer([], {
['PUT_SOME_ENTITY']: putIds('entities', GenericSchema),
})
const entitiesReducer = createReducer({}, {
['PUT_SOME_ENTITY']: putEntities('entities', GenericSchema),
})
const isRefreshingReducer = createReducer(false, {
['SOME_ENTITY_IS_REFRESHING']: isRefreshing()
})
const deleteReducer = createReducer(false, {
['SOME_ENTITY_DELETED']: eraseId()
})
const lastUpdatedReducer = createReducer('never', {
['PUT_SOME_ENTITY']: lastUpdated(),
['SOME_ENTITY_DELETED']: lastUpdated()
})
export const sampleStateEntry = combineReducers({
ids: idsReducer,
entities: entitiesReducer,
deleteEntity: deleteReducer,
isRefreshing: isRefreshingReducer,
lastUpdated: lastUpdatedReducer
})

GenericSchema

GenericSchema is very basic and simplified schema for normalizr. It assumes the action entity prop name is "entities"

NormalizedCollection

NormalizedCollection is a class that can be used to fetch normalized data in a selector.

Usage:

const entityCollection = new NormalizedCollection(entities, ids)
const items = entityCollection.getItems() // returns array of all items
const item = entityCollection.find(itemId) // returns the object by id

Example selectors:

import { NormalizedCollection } from 'ReduxUtils'
export function selectCarsCollection(state: Object): NormalizedCollection {
const {cars} = state
return new NormalizedCollection(cars.entities, cars.ids)
}
export function selectCarsList(state: Object): Array<Object> {
const Cars = selectCarsCollection(state)
return Cars.getItems()
}
export function selectCar(state: Object, carId: Number): Object {
const Cars = selectCarsCollection(state)
return Cars.find(carId)
}

Redux Utils is a few redux utilities that I created/co-created with @callmetwan (Anthony Garritano)

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - Digitova/ReduxUtils · GitHub
Skip to content

Latest commit

History

12 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

ReduxUtils

arrayify

Arrayify is a simple utility that checks to see if the data passed to it is an array. If the data is an array it returns the data as is. If the data is not an array it returns the data wrapped in an array. If the data is null or undefined it returns an empty array.

Usage:

import {arrayify} from ReduxUtils
const car = {
make: 'Toyota'
model: 'Tacoma'
year: 2015
}
const cars = arrayify(car) // cars is an array [car]
const cars2 = arrayify([car]) // cars2 is an array [car]
const cars3 = arrayify(null) // cars3 is an empty array []

createReducer

createReducer is a simple function that is a part of lots of redux libraries. It simplifies the boilerplate for creating reducers.

Usage:

import {createReducer} from ReduxUtils
const carReducer = createReducer({}, {
['PUT_CAR']: (state, action) => action.payload.car,
})

ReducerFactories

ReducerFactories are a powerful state normalization abstraction that really allows you to create very clean and simple reducers. The reducer factories use normalizr to normalize the data and simplify the boilerplate needed to put list data into redux.

putIds

This function puts the normalized IDs into the state as an array

putIds (payloadEntityName: string, schema: Object)
const exampleAction = {
type: 'PUT_ENTITIES',
payload: { entities },
receivedAt: Date.now()
}

putEntities

This function puts the normalized entity objects into the state as an array

putEntities(payloadEntityName: string, schema: Object)
const exampleAction = {
type: 'PUT_ENTITIES',
payload: { entities },
receivedAt: Date.now()
}

eraseAllIds

This function wipes out the ids array from the state essentially deleting the normalized data

eraseAllIds()
const exampleAction = {
type: 'DELETE_ALL_ENTITIES',
receivedAt: Date.now()
}

eraseId

This function eliminates a single ID from the normalized IDs array. It assumes the ID you want exists as a property on the action payload (action.payload.id)

eraseId() // assumes id is in the action payload.
const exampleAction = {
type: 'DELETE_ENTITY',
payload: { id: 32 },
receivedAt: Date.now()
}

isRefreshing

This function can be used to update an isRefreshing flag for the data set. It assumes the isRefreshing property exists on the action payload.

isRefreshing()
const exampleAction = {
type: 'SET_IS_REFRESHING',
payload: { isRefreshing: true },
receivedAt: Date.now()
}

lastUpdated

This function sets a timestamp for the last time a data element was updated. It is looking for the receivedAt property on the action.

lastUpdated() // pulls time from action.receivedAt
const exampleAction = {
type: 'PUT_ENTITIES',
receivedAt: Date.now()
}

See the following example reducer that uses these factories:

import { putIds,
putEntities, eraseAllIds, eraseId, isRefreshing, lastUpdated, createReducer,
GenericSchema
} from ReduxUtils
const idsReducer = createReducer([], {
['PUT_SOME_ENTITY']: putIds('entities', GenericSchema),
})
const entitiesReducer = createReducer({}, {
['PUT_SOME_ENTITY']: putEntities('entities', GenericSchema),
})
const isRefreshingReducer = createReducer(false, {
['SOME_ENTITY_IS_REFRESHING']: isRefreshing()
})
const deleteReducer = createReducer(false, {
['SOME_ENTITY_DELETED']: eraseId()
})
const lastUpdatedReducer = createReducer('never', {
['PUT_SOME_ENTITY']: lastUpdated(),
['SOME_ENTITY_DELETED']: lastUpdated()
})
export const sampleStateEntry = combineReducers({
ids: idsReducer,
entities: entitiesReducer,
deleteEntity: deleteReducer,
isRefreshing: isRefreshingReducer,
lastUpdated: lastUpdatedReducer
})

GenericSchema

GenericSchema is very basic and simplified schema for normalizr. It assumes the action entity prop name is "entities"

NormalizedCollection

NormalizedCollection is a class that can be used to fetch normalized data in a selector.

Usage:

const entityCollection = new NormalizedCollection(entities, ids)
const items = entityCollection.getItems() // returns array of all items
const item = entityCollection.find(itemId) // returns the object by id

Example selectors:

import { NormalizedCollection } from 'ReduxUtils'
export function selectCarsCollection(state: Object): NormalizedCollection {
const {cars} = state
return new NormalizedCollection(cars.entities, cars.ids)
}
export function selectCarsList(state: Object): Array<Object> {
const Cars = selectCarsCollection(state)
return Cars.getItems()
}
export function selectCar(state: Object, carId: Number): Object {
const Cars = selectCarsCollection(state)
return Cars.find(carId)
}

Redux Utils is a few redux utilities that I created/co-created with @callmetwan (Anthony Garritano)

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' GitHub - Digitova/ReduxUtils · GitHub
Skip to content

Latest commit

History

12 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

ReduxUtils

arrayify

Arrayify is a simple utility that checks to see if the data passed to it is an array. If the data is an array it returns the data as is. If the data is not an array it returns the data wrapped in an array. If the data is null or undefined it returns an empty array.

Usage:

import {arrayify} from ReduxUtils
const car = {
make: 'Toyota'
model: 'Tacoma'
year: 2015
}
const cars = arrayify(car) // cars is an array [car]
const cars2 = arrayify([car]) // cars2 is an array [car]
const cars3 = arrayify(null) // cars3 is an empty array []

createReducer

createReducer is a simple function that is a part of lots of redux libraries. It simplifies the boilerplate for creating reducers.

Usage:

import {createReducer} from ReduxUtils
const carReducer = createReducer({}, {
['PUT_CAR']: (state, action) => action.payload.car,
})

ReducerFactories

ReducerFactories are a powerful state normalization abstraction that really allows you to create very clean and simple reducers. The reducer factories use normalizr to normalize the data and simplify the boilerplate needed to put list data into redux.

putIds

This function puts the normalized IDs into the state as an array

putIds (payloadEntityName: string, schema: Object)
const exampleAction = {
type: 'PUT_ENTITIES',
payload: { entities },
receivedAt: Date.now()
}

putEntities

This function puts the normalized entity objects into the state as an array

putEntities(payloadEntityName: string, schema: Object)
const exampleAction = {
type: 'PUT_ENTITIES',
payload: { entities },
receivedAt: Date.now()
}

eraseAllIds

This function wipes out the ids array from the state essentially deleting the normalized data

eraseAllIds()
const exampleAction = {
type: 'DELETE_ALL_ENTITIES',
receivedAt: Date.now()
}

eraseId

This function eliminates a single ID from the normalized IDs array. It assumes the ID you want exists as a property on the action payload (action.payload.id)

eraseId() // assumes id is in the action payload.
const exampleAction = {
type: 'DELETE_ENTITY',
payload: { id: 32 },
receivedAt: Date.now()
}

isRefreshing

This function can be used to update an isRefreshing flag for the data set. It assumes the isRefreshing property exists on the action payload.

isRefreshing()
const exampleAction = {
type: 'SET_IS_REFRESHING',
payload: { isRefreshing: true },
receivedAt: Date.now()
}

lastUpdated

This function sets a timestamp for the last time a data element was updated. It is looking for the receivedAt property on the action.

lastUpdated() // pulls time from action.receivedAt
const exampleAction = {
type: 'PUT_ENTITIES',
receivedAt: Date.now()
}

See the following example reducer that uses these factories:

import { putIds,
putEntities, eraseAllIds, eraseId, isRefreshing, lastUpdated, createReducer,
GenericSchema
} from ReduxUtils
const idsReducer = createReducer([], {
['PUT_SOME_ENTITY']: putIds('entities', GenericSchema),
})
const entitiesReducer = createReducer({}, {
['PUT_SOME_ENTITY']: putEntities('entities', GenericSchema),
})
const isRefreshingReducer = createReducer(false, {
['SOME_ENTITY_IS_REFRESHING']: isRefreshing()
})
const deleteReducer = createReducer(false, {
['SOME_ENTITY_DELETED']: eraseId()
})
const lastUpdatedReducer = createReducer('never', {
['PUT_SOME_ENTITY']: lastUpdated(),
['SOME_ENTITY_DELETED']: lastUpdated()
})
export const sampleStateEntry = combineReducers({
ids: idsReducer,
entities: entitiesReducer,
deleteEntity: deleteReducer,
isRefreshing: isRefreshingReducer,
lastUpdated: lastUpdatedReducer
})

GenericSchema

GenericSchema is very basic and simplified schema for normalizr. It assumes the action entity prop name is "entities"

NormalizedCollection

NormalizedCollection is a class that can be used to fetch normalized data in a selector.

Usage:

const entityCollection = new NormalizedCollection(entities, ids)
const items = entityCollection.getItems() // returns array of all items
const item = entityCollection.find(itemId) // returns the object by id

Example selectors:

import { NormalizedCollection } from 'ReduxUtils'
export function selectCarsCollection(state: Object): NormalizedCollection {
const {cars} = state
return new NormalizedCollection(cars.entities, cars.ids)
}
export function selectCarsList(state: Object): Array<Object> {
const Cars = selectCarsCollection(state)
return Cars.getItems()
}
export function selectCar(state: Object, carId: Number): Object {
const Cars = selectCarsCollection(state)
return Cars.find(carId)
}

Redux Utils is a few redux utilities that I created/co-created with @callmetwan (Anthony Garritano)

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - Digitova/ReduxUtils · GitHub
Skip to content

Latest commit

History

12 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

ReduxUtils

arrayify

Arrayify is a simple utility that checks to see if the data passed to it is an array. If the data is an array it returns the data as is. If the data is not an array it returns the data wrapped in an array. If the data is null or undefined it returns an empty array.

Usage:

import {arrayify} from ReduxUtils
const car = {
make: 'Toyota'
model: 'Tacoma'
year: 2015
}
const cars = arrayify(car) // cars is an array [car]
const cars2 = arrayify([car]) // cars2 is an array [car]
const cars3 = arrayify(null) // cars3 is an empty array []

createReducer

createReducer is a simple function that is a part of lots of redux libraries. It simplifies the boilerplate for creating reducers.

Usage:

import {createReducer} from ReduxUtils
const carReducer = createReducer({}, {
['PUT_CAR']: (state, action) => action.payload.car,
})

ReducerFactories

ReducerFactories are a powerful state normalization abstraction that really allows you to create very clean and simple reducers. The reducer factories use normalizr to normalize the data and simplify the boilerplate needed to put list data into redux.

putIds

This function puts the normalized IDs into the state as an array

putIds (payloadEntityName: string, schema: Object)
const exampleAction = {
type: 'PUT_ENTITIES',
payload: { entities },
receivedAt: Date.now()
}

putEntities

This function puts the normalized entity objects into the state as an array

putEntities(payloadEntityName: string, schema: Object)
const exampleAction = {
type: 'PUT_ENTITIES',
payload: { entities },
receivedAt: Date.now()
}

eraseAllIds

This function wipes out the ids array from the state essentially deleting the normalized data

eraseAllIds()
const exampleAction = {
type: 'DELETE_ALL_ENTITIES',
receivedAt: Date.now()
}

eraseId

This function eliminates a single ID from the normalized IDs array. It assumes the ID you want exists as a property on the action payload (action.payload.id)

eraseId() // assumes id is in the action payload.
const exampleAction = {
type: 'DELETE_ENTITY',
payload: { id: 32 },
receivedAt: Date.now()
}

isRefreshing

This function can be used to update an isRefreshing flag for the data set. It assumes the isRefreshing property exists on the action payload.

isRefreshing()
const exampleAction = {
type: 'SET_IS_REFRESHING',
payload: { isRefreshing: true },
receivedAt: Date.now()
}

lastUpdated

This function sets a timestamp for the last time a data element was updated. It is looking for the receivedAt property on the action.

lastUpdated() // pulls time from action.receivedAt
const exampleAction = {
type: 'PUT_ENTITIES',
receivedAt: Date.now()
}

See the following example reducer that uses these factories:

import { putIds,
putEntities, eraseAllIds, eraseId, isRefreshing, lastUpdated, createReducer,
GenericSchema
} from ReduxUtils
const idsReducer = createReducer([], {
['PUT_SOME_ENTITY']: putIds('entities', GenericSchema),
})
const entitiesReducer = createReducer({}, {
['PUT_SOME_ENTITY']: putEntities('entities', GenericSchema),
})
const isRefreshingReducer = createReducer(false, {
['SOME_ENTITY_IS_REFRESHING']: isRefreshing()
})
const deleteReducer = createReducer(false, {
['SOME_ENTITY_DELETED']: eraseId()
})
const lastUpdatedReducer = createReducer('never', {
['PUT_SOME_ENTITY']: lastUpdated(),
['SOME_ENTITY_DELETED']: lastUpdated()
})
export const sampleStateEntry = combineReducers({
ids: idsReducer,
entities: entitiesReducer,
deleteEntity: deleteReducer,
isRefreshing: isRefreshingReducer,
lastUpdated: lastUpdatedReducer
})

GenericSchema

GenericSchema is very basic and simplified schema for normalizr. It assumes the action entity prop name is "entities"

NormalizedCollection

NormalizedCollection is a class that can be used to fetch normalized data in a selector.

Usage:

const entityCollection = new NormalizedCollection(entities, ids)
const items = entityCollection.getItems() // returns array of all items
const item = entityCollection.find(itemId) // returns the object by id

Example selectors:

import { NormalizedCollection } from 'ReduxUtils'
export function selectCarsCollection(state: Object): NormalizedCollection {
const {cars} = state
return new NormalizedCollection(cars.entities, cars.ids)
}
export function selectCarsList(state: Object): Array<Object> {
const Cars = selectCarsCollection(state)
return Cars.getItems()
}
export function selectCar(state: Object, carId: Number): Object {
const Cars = selectCarsCollection(state)
return Cars.find(carId)
}

Redux Utils is a few redux utilities that I created/co-created with @callmetwan (Anthony Garritano)

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); })(); GitHub - Digitova/ReduxUtils · GitHub
Skip to content

Latest commit

History

12 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

ReduxUtils

arrayify

Arrayify is a simple utility that checks to see if the data passed to it is an array. If the data is an array it returns the data as is. If the data is not an array it returns the data wrapped in an array. If the data is null or undefined it returns an empty array.

Usage:

import {arrayify} from ReduxUtils
const car = {
make: 'Toyota'
model: 'Tacoma'
year: 2015
}
const cars = arrayify(car) // cars is an array [car]
const cars2 = arrayify([car]) // cars2 is an array [car]
const cars3 = arrayify(null) // cars3 is an empty array []

createReducer

createReducer is a simple function that is a part of lots of redux libraries. It simplifies the boilerplate for creating reducers.

Usage:

import {createReducer} from ReduxUtils
const carReducer = createReducer({}, {
['PUT_CAR']: (state, action) => action.payload.car,
})

ReducerFactories

ReducerFactories are a powerful state normalization abstraction that really allows you to create very clean and simple reducers. The reducer factories use normalizr to normalize the data and simplify the boilerplate needed to put list data into redux.

putIds

This function puts the normalized IDs into the state as an array

putIds (payloadEntityName: string, schema: Object)
const exampleAction = {
type: 'PUT_ENTITIES',
payload: { entities },
receivedAt: Date.now()
}

putEntities

This function puts the normalized entity objects into the state as an array

putEntities(payloadEntityName: string, schema: Object)
const exampleAction = {
type: 'PUT_ENTITIES',
payload: { entities },
receivedAt: Date.now()
}

eraseAllIds

This function wipes out the ids array from the state essentially deleting the normalized data

eraseAllIds()
const exampleAction = {
type: 'DELETE_ALL_ENTITIES',
receivedAt: Date.now()
}

eraseId

This function eliminates a single ID from the normalized IDs array. It assumes the ID you want exists as a property on the action payload (action.payload.id)

eraseId() // assumes id is in the action payload.
const exampleAction = {
type: 'DELETE_ENTITY',
payload: { id: 32 },
receivedAt: Date.now()
}

isRefreshing

This function can be used to update an isRefreshing flag for the data set. It assumes the isRefreshing property exists on the action payload.

isRefreshing()
const exampleAction = {
type: 'SET_IS_REFRESHING',
payload: { isRefreshing: true },
receivedAt: Date.now()
}

lastUpdated

This function sets a timestamp for the last time a data element was updated. It is looking for the receivedAt property on the action.

lastUpdated() // pulls time from action.receivedAt
const exampleAction = {
type: 'PUT_ENTITIES',
receivedAt: Date.now()
}

See the following example reducer that uses these factories:

import { putIds,
putEntities, eraseAllIds, eraseId, isRefreshing, lastUpdated, createReducer,
GenericSchema
} from ReduxUtils
const idsReducer = createReducer([], {
['PUT_SOME_ENTITY']: putIds('entities', GenericSchema),
})
const entitiesReducer = createReducer({}, {
['PUT_SOME_ENTITY']: putEntities('entities', GenericSchema),
})
const isRefreshingReducer = createReducer(false, {
['SOME_ENTITY_IS_REFRESHING']: isRefreshing()
})
const deleteReducer = createReducer(false, {
['SOME_ENTITY_DELETED']: eraseId()
})
const lastUpdatedReducer = createReducer('never', {
['PUT_SOME_ENTITY']: lastUpdated(),
['SOME_ENTITY_DELETED']: lastUpdated()
})
export const sampleStateEntry = combineReducers({
ids: idsReducer,
entities: entitiesReducer,
deleteEntity: deleteReducer,
isRefreshing: isRefreshingReducer,
lastUpdated: lastUpdatedReducer
})

GenericSchema

GenericSchema is very basic and simplified schema for normalizr. It assumes the action entity prop name is "entities"

NormalizedCollection

NormalizedCollection is a class that can be used to fetch normalized data in a selector.

Usage:

const entityCollection = new NormalizedCollection(entities, ids)
const items = entityCollection.getItems() // returns array of all items
const item = entityCollection.find(itemId) // returns the object by id

Example selectors:

import { NormalizedCollection } from 'ReduxUtils'
export function selectCarsCollection(state: Object): NormalizedCollection {
const {cars} = state
return new NormalizedCollection(cars.entities, cars.ids)
}
export function selectCarsList(state: Object): Array<Object> {
const Cars = selectCarsCollection(state)
return Cars.getItems()
}
export function selectCar(state: Object, carId: Number): Object {
const Cars = selectCarsCollection(state)
return Cars.find(carId)
}

Redux Utils is a few redux utilities that I created/co-created with @callmetwan (Anthony Garritano)

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages