saleor-dashboard/src/components/Navigator/modes/commands/actions.ts

105 lines
2.7 KiB
TypeScript
Raw Normal View History

2019-11-22 15:39:20 +00:00
import { score } from "fuzzaldrin";
import { IntlShape } from "react-intl";
import { categoryAddUrl } from "@saleor/categories/urls";
import { collectionAddUrl } from "@saleor/collections/urls";
import { customerAddUrl } from "@saleor/customers/urls";
import { voucherAddUrl } from "@saleor/discounts/urls";
import { UseNavigatorResult } from "@saleor/hooks/useNavigator";
import { OrderDraftCreate } from "@saleor/orders/types/OrderDraftCreate";
import { productAddUrl } from "@saleor/products/urls";
import { MutationFunction } from "react-apollo";
2019-11-26 14:14:21 +00:00
import { QuickSearchActionInput, QuickSearchMode } from "../../types";
2019-11-22 15:39:20 +00:00
import messages from "../messages";
2019-11-25 14:57:50 +00:00
import { sortScores } from "../utils";
2019-11-22 15:39:20 +00:00
const threshold = 0.05;
const maxActions = 5;
interface Command {
label: string;
2019-11-26 14:14:21 +00:00
onClick: () => boolean;
2019-11-22 15:39:20 +00:00
}
export function searchInCommands(
search: string,
intl: IntlShape,
navigate: UseNavigatorResult,
2019-11-26 14:14:21 +00:00
createOrder: MutationFunction<OrderDraftCreate, {}>,
setMode: (mode: QuickSearchMode) => void
2019-11-25 13:51:46 +00:00
): QuickSearchActionInput[] {
2019-11-22 15:39:20 +00:00
const actions: Command[] = [
{
2019-11-26 14:34:56 +00:00
label: intl.formatMessage(messages.createCategory),
2019-11-26 14:14:21 +00:00
onClick: () => {
navigate(categoryAddUrl());
return false;
}
2019-11-22 15:39:20 +00:00
},
{
2019-11-26 14:34:56 +00:00
label: intl.formatMessage(messages.createCollection),
2019-11-26 14:14:21 +00:00
onClick: () => {
navigate(collectionAddUrl);
return false;
}
2019-11-22 15:39:20 +00:00
},
{
2019-11-26 14:34:56 +00:00
label: intl.formatMessage(messages.createProduct),
2019-11-26 14:14:21 +00:00
onClick: () => {
navigate(productAddUrl);
return false;
}
2019-11-22 15:39:20 +00:00
},
{
2019-11-26 14:34:56 +00:00
label: intl.formatMessage(messages.createCustomer),
2019-11-26 14:14:21 +00:00
onClick: () => {
navigate(customerAddUrl);
return false;
}
2019-11-22 15:39:20 +00:00
},
{
2019-11-26 14:34:56 +00:00
label: intl.formatMessage(messages.createVoucher),
2019-11-26 14:14:21 +00:00
onClick: () => {
navigate(voucherAddUrl);
return false;
}
2019-11-22 15:39:20 +00:00
},
{
label: intl.formatMessage(messages.createOrder),
2019-11-26 14:14:21 +00:00
onClick: () => {
createOrder();
return false;
}
},
{
label: intl.formatMessage(messages.helpMode),
onClick: () => {
setMode("help");
return true;
}
2019-11-22 15:39:20 +00:00
}
];
return actions.map(action => ({
label: action.label,
onClick: action.onClick,
score: score(action.label, search),
2019-11-25 13:51:46 +00:00
text: action.label,
2019-11-22 15:39:20 +00:00
type: "action"
}));
}
function getCommandModeActions(
query: string,
intl: IntlShape,
navigate: UseNavigatorResult,
2019-11-26 14:14:21 +00:00
createOrder: MutationFunction<OrderDraftCreate, {}>,
setMode: (mode: QuickSearchMode) => void
2019-11-25 13:51:46 +00:00
): QuickSearchActionInput[] {
2019-11-26 14:14:21 +00:00
return [...searchInCommands(query, intl, navigate, createOrder, setMode)]
2019-11-22 15:39:20 +00:00
.filter(action => action.score >= threshold)
2019-11-25 14:57:50 +00:00
.sort(sortScores)
2019-11-22 15:39:20 +00:00
.slice(0, maxActions);
}
export default getCommandModeActions;