@shopify/app-bridge-core
Version:
**[Join our team and work on libraries like this one.](https://www.shopify.ca/careers)**
46 lines (43 loc) • 1.92 kB
JavaScript
import { Action, ActionVerb, ResourceType } from '../../actions/ResourcePicker/index.js';
import { validate, matchesObject, makeOptional, matchesString, oneOf, matchesBoolean, matchesEnum, matchesArray, matchesPositiveInteger } from '../type-validate.js';
import { createActionValidator } from '../utils.js';
const resourceSelectionSchema = matchesArray(matchesObject({
id: matchesString(),
}));
const resourcePickerOptions = matchesObject({
initialQuery: makeOptional(matchesString()),
filterQuery: makeOptional(matchesString()),
initialSelectionIds: makeOptional(resourceSelectionSchema),
selectMultiple: makeOptional(oneOf(matchesBoolean(), matchesPositiveInteger())),
showHidden: makeOptional(matchesBoolean()),
showVariants: makeOptional(matchesBoolean()),
showDraft: makeOptional(matchesBoolean()),
showArchived: makeOptional(matchesBoolean()),
showDraftBadge: makeOptional(matchesBoolean()),
showArchivedBadge: makeOptional(matchesBoolean()),
actionVerb: makeOptional(matchesEnum(ActionVerb)),
});
const resourcePickerActionSchema = matchesObject({
resourceType: matchesEnum(ResourceType),
options: makeOptional(resourcePickerOptions),
});
const selectionSchema = matchesObject({
selection: resourceSelectionSchema,
});
function validateProps(props) {
return validate(props, resourcePickerOptions);
}
function validateAction(action) {
switch (action.type) {
case Action.UPDATE:
case Action.OPEN:
return validate(action, createActionValidator(Action, resourcePickerActionSchema, false, true));
case Action.SELECT:
return validate(action, createActionValidator(Action, selectionSchema, true, true));
case Action.CANCEL:
case Action.CLOSE:
default:
return validate(action, createActionValidator(Action));
}
}
export { Action, validateAction, validateProps };