mirror of
https://github.com/Stremio/stremio-web.git
synced 2026-08-16 15:44:49 +00:00
useSelectableResource hook dropped
This commit is contained in:
parent
15320104b0
commit
d5ebaa150e
1 changed files with 0 additions and 97 deletions
|
|
@ -1,97 +0,0 @@
|
|||
const React = require('react');
|
||||
const isEqual = require('lodash.isequal');
|
||||
|
||||
const readyResourceForRequest = (resources, request) => {
|
||||
return resources.reduce((result, resource) => {
|
||||
if (resource.content.type === 'Ready' && isEqual(resource.request, request)) {
|
||||
return resource;
|
||||
}
|
||||
|
||||
return result;
|
||||
}, null);
|
||||
};
|
||||
|
||||
const reducer = (state, action) => {
|
||||
switch (action.type) {
|
||||
case 'resources-changed': {
|
||||
if (state.selected.resource === null ||
|
||||
!state.selected.byUser ||
|
||||
readyResourceForRequest(action.resources, state.selected.resource.request) === null) {
|
||||
const selectedResource = action.resources.reduce((result, resource) => {
|
||||
if (resource.content.type === 'Ready') {
|
||||
return resource;
|
||||
}
|
||||
|
||||
return result;
|
||||
}, null);
|
||||
return {
|
||||
...state,
|
||||
resourceRef: action.resourceRef,
|
||||
resources: action.resources,
|
||||
selected: {
|
||||
resource: selectedResource,
|
||||
byUser: false
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
return {
|
||||
...state,
|
||||
resourceRef: action.resourceRef,
|
||||
resources: action.resources
|
||||
};
|
||||
}
|
||||
case 'resource-selected': {
|
||||
const selectedResource = readyResourceForRequest(state.resources, action.request);
|
||||
if (selectedResource !== null) {
|
||||
return {
|
||||
...state,
|
||||
selected: {
|
||||
resource: selectedResource,
|
||||
byUser: true
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
return state;
|
||||
}
|
||||
default: {
|
||||
return state;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
const initializer = ([resourceRef, resources]) => {
|
||||
const initialState = {
|
||||
resourceRef: null,
|
||||
resources: [],
|
||||
selected: {
|
||||
resource: null,
|
||||
byUser: false
|
||||
}
|
||||
};
|
||||
const initAction = {
|
||||
type: 'resources-changed',
|
||||
resourceRef,
|
||||
resources
|
||||
};
|
||||
|
||||
return reducer(initialState, initAction);
|
||||
};
|
||||
|
||||
const useSelectableResource = (resourceRef, resources) => {
|
||||
const [state, dispatch] = React.useReducer(
|
||||
reducer,
|
||||
[resourceRef, resources],
|
||||
initializer
|
||||
);
|
||||
const selectResource = React.useCallback((request) => {
|
||||
dispatch({ type: 'resource-selected', request });
|
||||
}, []);
|
||||
React.useEffect(() => {
|
||||
dispatch({ type: 'resources-changed', resourceRef, resources });
|
||||
}, [resourceRef, resources]);
|
||||
return [state.resourceRef, state.resources, state.selected.resource, selectResource];
|
||||
};
|
||||
|
||||
module.exports = useSelectableResource;
|
||||
Loading…
Reference in a new issue