persist middleware

This commit is contained in:
Nikolai 2022-11-01 09:50:58 +06:00
parent 9059f2013e
commit e434d1c1c2
3 changed files with 94 additions and 58 deletions

@ -108,15 +108,7 @@ const Discounts: React.FC = () => {
}; };
let { discountsArray, discountsArraySet } = useStore<StoreState>((state) => state); const { discountsArray, discountsArraySet } = useStore<StoreState>((state) => state);
const getDiscounts = localStorage.getItem("discounts");
const store = useStore( (state) => state );
if( getDiscounts && !store.discountsArray.length ) {
const rows:Array<DiscountProps> = JSON.parse(getDiscounts);
if( rows.length ) { store.discountsArraySet( rows ); };
}
const { discountsActiveArray, discountsActiveArraySet } = useStore<StoreState>((state) => state); const { discountsActiveArray, discountsActiveArraySet } = useStore<StoreState>((state) => state);
let discountsActiveArrayUpdated:Array<number>; let discountsActiveArrayUpdated:Array<number>;
@ -132,19 +124,11 @@ const Discounts: React.FC = () => {
if( JSON.stringify(discountsActiveArray) != JSON.stringify(discountsActiveArrayUpdated) ) { if( JSON.stringify(discountsActiveArray) != JSON.stringify(discountsActiveArrayUpdated) ) {
discountsActiveArraySet( discountsActiveArrayUpdated ); discountsActiveArraySet( discountsActiveArrayUpdated );
localStorage.setItem("activeDiscounts", JSON.stringify( discountsActiveArrayUpdated ));
} }
} }
findActiveDiscounts(); findActiveDiscounts();
const getActiveDiscounts = localStorage.getItem("activeDiscounts");
if( getActiveDiscounts && !store.discountsArray.length ) {
const rows:Array<number> = JSON.parse(getActiveDiscounts);
if( rows.length ) { store.discountsActiveArraySet( rows ); };
}
const discountsArrayConverted = discountsArray.map( (item) => { const discountsArrayConverted = discountsArray.map( (item) => {
const dateFrom = item.from ? new Date( Number(item.from) ) : ""; const dateFrom = item.from ? new Date( Number(item.from) ) : "";
const dateDueTo = item.from ? new Date( Number(item.dueTo) ) : ""; const dateDueTo = item.from ? new Date( Number(item.dueTo) ) : "";
@ -172,7 +156,7 @@ const Discounts: React.FC = () => {
} }
} ); } );
const createDiscount = ( name:string, discount: number ) => { const createDiscount = ( name:string, discount: number, addedMore: number ) => {
const newDiscount = { const newDiscount = {
id: new Date().getTime(), id: new Date().getTime(),
name, name,
@ -188,15 +172,21 @@ const Discounts: React.FC = () => {
const discountsArrayUpdated = [ ...discountsArray, newDiscount ]; const discountsArrayUpdated = [ ...discountsArray, newDiscount ];
discountsArraySet( discountsArrayUpdated ); discountsArraySet( discountsArrayUpdated );
localStorage.setItem("discounts", JSON.stringify( discountsArrayUpdated ));
} }
const fieldName = React.useRef<HTMLInputElement | null>(null); const fieldName = React.useRef<HTMLInputElement | null>(null);
const fieldDiscount = React.useRef<HTMLInputElement | null>(null); const fieldDiscount = React.useRef<HTMLInputElement | null>(null);
const fieldAddedMore = React.useRef<HTMLInputElement | null>(null);
const checkFields = () => { const checkFields = () => {
if( fieldName.current != null && fieldDiscount.current != null ) { if( fieldName.current != null
createDiscount( fieldName.current.value, Number(fieldDiscount.current.value) ); && fieldDiscount.current != null
&& fieldAddedMore.current != null ) {
createDiscount( fieldName.current.value,
Number(fieldDiscount.current.value),
Number(fieldAddedMore.current.value) );
} }
} }
@ -225,7 +215,6 @@ const Discounts: React.FC = () => {
} ); } );
discountsArraySet( discountsArray ); discountsArraySet( discountsArray );
localStorage.setItem("discounts", JSON.stringify( discountsArray ));
} }
return ( return (
@ -341,6 +330,27 @@ const Discounts: React.FC = () => {
inputRef={ fieldDiscount } inputRef={ fieldDiscount }
/> />
<TextField
id = "standard-basic"
label = { "Внесено больше" }
variant = "filled"
color = "secondary"
type = "number"
sx={{
marginTop: "15px"
}}
InputProps={{
style: {
backgroundColor: theme.palette.content.main,
color: theme.palette.secondary.main,
} }}
InputLabelProps={{
style: {
color: theme.palette.secondary.main
} }}
inputRef={ fieldAddedMore }
/>
<TableContainer component={Paper} sx={{ <TableContainer component={Paper} sx={{
width: "100%", width: "100%",
marginTop: "35px", marginTop: "35px",

@ -67,6 +67,12 @@ const columns: GridColDef[] = [
width: 160, width: 160,
sortable: false, sortable: false,
}, },
{
field: "conditions",
headerName: "Условия",
width: 110,
sortable: false,
},
]; ];
const rows = [ const rows = [
@ -79,8 +85,6 @@ const rows = [
] }, ] },
]; ];
//localStorage.setItem("tariffs", JSON.stringify(rows));
const rowz:Array<PromocodeProps> = [ const rowz:Array<PromocodeProps> = [
{ id: 1, name: "Промокод 1", endless: false, from: "", dueTo: "", privileges: [ { id: 1, name: "Промокод 1", endless: false, from: "", dueTo: "", privileges: [
{ {
@ -111,21 +115,6 @@ const DataGridElement: React.FC<MWProps> = ({ openModal }) => {
const { discountsArray, discountsArraySet } = useStore<StoreState>((state) => state); const { discountsArray, discountsArraySet } = useStore<StoreState>((state) => state);
const { discountsActiveArray, discountsActiveArraySet } = useStore<StoreState>((state) => state); const { discountsActiveArray, discountsActiveArraySet } = useStore<StoreState>((state) => state);
const getDiscounts = localStorage.getItem("discounts");
const store = useStore( (state) => state );
if( getDiscounts && !store.discountsArray.length ) {
const rows:Array<DiscountProps> = JSON.parse(getDiscounts);
if( rows.length ) { store.discountsArraySet( rows ); };
}
const getActiveDiscounts = localStorage.getItem("activeDiscounts");
if( getActiveDiscounts && !store.discountsArray.length ) {
const rows:Array<number> = JSON.parse(getActiveDiscounts);
if( rows.length ) { store.discountsActiveArraySet( rows ); };
}
const [checkboxStates, setCheckboxStates] = React.useState(1); const [checkboxStates, setCheckboxStates] = React.useState(1);
const checkboxToggle = () => { const checkboxToggle = () => {
@ -159,8 +148,6 @@ const DataGridElement: React.FC<MWProps> = ({ openModal }) => {
} }
} ); } );
localStorage.setItem("tariffs", JSON.stringify(tariffsArray));
const { tariffsSelectedRowsData, tariffsSelectedRowsDataSet } = useStore<StoreState>((state) => state); const { tariffsSelectedRowsData, tariffsSelectedRowsDataSet } = useStore<StoreState>((state) => state);
const onRowsSelectionHandler = ( ids:GridSelectionModel ) => { const onRowsSelectionHandler = ( ids:GridSelectionModel ) => {
const result:Array<ArrayProps> = []; const result:Array<ArrayProps> = [];
@ -383,7 +370,14 @@ const DataGridElement: React.FC<MWProps> = ({ openModal }) => {
Корзина Корзина
</Typography> </Typography>
<FormControlLabel sx={{ marginTop: "15px", }} control={ <Box sx={{
display: "flex",
marginTop: "15px",
marginBottom: "15px",
width: "350px",
justifyContent: "space-between"
}}>
<FormControlLabel control={
<Checkbox sx={{ <Checkbox sx={{
color: theme.palette.secondary.main, color: theme.palette.secondary.main,
"&.Mui-checked": { "&.Mui-checked": {
@ -392,6 +386,29 @@ const DataGridElement: React.FC<MWProps> = ({ openModal }) => {
}} onClick={ () => checkboxToggle() } /> }} onClick={ () => checkboxToggle() } />
} label="НКО" /> } label="НКО" />
<TextField
id = "standard-basic"
label = { "Внесено" }
variant = "filled"
size="small"
color = "secondary"
type="number"
sx={{
width: "200px"
}}
InputProps={{
style: {
backgroundColor: theme.palette.content.main,
color: theme.palette.secondary.main,
} }}
InputLabelProps={{
style: {
color: theme.palette.secondary.main
} }}
//inputRef={ fieldPromocode }
/>
</Box>
<List sx={{ <List sx={{
width: "50%", width: "50%",
border: "1px solid", border: "1px solid",

@ -1,31 +1,40 @@
import create from "zustand"; import create from "zustand";
import { persist } from "zustand/middleware"
import { ArrayProps } from "./Components/LoggedIn/Content/Tariffs/types"; import { ArrayProps } from "./Components/LoggedIn/Content/Tariffs/types";
import { PromocodeProps } from "./Components/LoggedIn/Content/Promocode/types"; import { PromocodeProps } from "./Components/LoggedIn/Content/Promocode/types";
import { DiscountProps } from "./Components/LoggedIn/Content/Discounts/types"; import { DiscountProps } from "./Components/LoggedIn/Content/Discounts/types";
const useStore = create<StoreState>((set) => ({ const useStore = create<StoreState>()(
tariffsArray: [], persist(
tariffsArraySet: (array) => set({ tariffsArray: array }), (set, get) => ({
tariffsArray: [],
tariffsArraySet: (array:Array<ArrayProps>) => set({ tariffsArray: array }),
tariffsSelectedRowsData: [], tariffsSelectedRowsData: [],
tariffsSelectedRowsDataSet: (array) => set({ tariffsSelectedRowsData: array }), tariffsSelectedRowsDataSet: (array:Array<ArrayProps>) => set({ tariffsSelectedRowsData: array }),
cartRowsData: [], cartRowsData: [],
cartRowsDataSet: (array) => set({ cartRowsData: array }), cartRowsDataSet: (array:Array<ArrayProps>) => set({ cartRowsData: array }),
promocodeArray: [], promocodeArray: [],
promocodeArraySet: (array) => set({ promocodeArray: array }), promocodeArraySet: (array:Array<PromocodeProps>) => set({ promocodeArray: array }),
discountsArray: [], discountsArray: [],
discountsArraySet: (array) => set({ discountsArray: array }), discountsArraySet: (array:Array<DiscountProps>) => set({ discountsArray: array }),
discountsActiveArray: [], discountsActiveArray: [],
discountsActiveArraySet: (array) => set({ discountsActiveArray: array }), discountsActiveArraySet: (array:Array<number>) => set({ discountsActiveArray: array }),
discountsSelectedRowsData: [], discountsSelectedRowsData: [],
discountsSelectedRowsDataSet: (array) => set({ discountsSelectedRowsData: array }), discountsSelectedRowsDataSet: (array:Array<DiscountProps>) => set({ discountsSelectedRowsData: array }),
})) }),
{
name: "arrays-storage",
getStorage: () => localStorage,
}
)
);
export interface StoreState { export interface StoreState {
tariffsArray: Array<ArrayProps>, tariffsArray: Array<ArrayProps>,