Files
bodyshop/client/src/components/shop-templates-list/shop-templates-list.container.jsx
2020-05-13 00:38:10 -07:00

67 lines
2.3 KiB
JavaScript

import { useQuery } from "@apollo/react-hooks";
import { List, Button } from "antd";
import React from "react";
import { QUERY_CUSTOM_TEMPLATES } from "../../graphql/templates.queries";
import AlertComponent from "../alert/alert.component";
import Skeleton from "../loading-skeleton/loading-skeleton.component";
import { useTranslation } from "react-i18next";
import { useHistory, useLocation } from "react-router-dom";
import queryString from "query-string";
import { TemplateList } from "../../utils/TemplateConstants";
import ShopTemplateAdd from "../shop-template-add/shop-template-add.component";
import ShopTemplateDeleteComponent from "../shop-template-delete/shop-template-delete.component";
export default function ShopTemplatesListContainer() {
const { loading, error, data, refetch } = useQuery(QUERY_CUSTOM_TEMPLATES);
const { t } = useTranslation();
const search = queryString.parse(useLocation().search);
const history = useHistory();
if (error) return <AlertComponent message={error.message} type='error' />;
const handleEdit = (record) => {
if (record) {
if (record.id) {
search.customTemplateId = record.id;
history.push({ search: queryString.stringify(search) });
}
} else {
delete search.customTemplateId;
history.push({ search: queryString.stringify(search) });
}
};
return (
<div>
<div>{t("bodyshop.labels.customtemplates")}</div>
<ShopTemplateAdd
shopTemplateList={data ? data.templates : []}
refetch={refetch}
/>
<List
loading={loading}
itemLayout='horizontal'
dataSource={data ? data.templates : []}
renderItem={(item) => (
<List.Item
actions={[
<Button onClick={() => handleEdit(item)}>
{t("general.actions.edit")}
</Button>,
<ShopTemplateDeleteComponent
templateId={item.id}
refetch={refetch}
/>,
]}>
<Skeleton title={false} loading={item.loading} active>
<List.Item.Meta
title={TemplateList[item.name].title}
description={TemplateList[item.name].description}
/>
</Skeleton>
</List.Item>
)}
/>
</div>
);
}