/* eslint-disable no-case-declarations */ import { GET_ONE_TEMPLATE, TEMPLATE_LOADING, TEMPLATE_PAGINATION_CHANGE, TEMPLATE_SEARCH, CLEAR_ALL_TEMPLATE, SELECT_PRODUCT, SELECT_POSTCARD, SET_UPLOADED_IMAGES, CLEAR_TEMPLATE_FIELDS, LOAD_DATA_FROM_LOCAL_STORAGE, SET_ROS_OFFER_PERCENTAGE, SET_HIRE_DESIGNER_FORM_FIELDS, CLEAR_HIRE_DESIGNER_FORM_FIELDS, SET_BLOCK_COLOR, CLEAR_TEMPLATE, CLEAR_REDUX, SET_PAGE_COUNT, SET_PRODUCTS } from '../actions/action-types'; // Utils import {Products} from '../../utils/products'; export interface DynamicField { value: string; key: string; defaultValue: string; } export interface Template { title: string; product: Product | null; templateType: string; } export interface Product { id: string | number; size: Array<{size: string}>; productType: string; } export interface TemplatesState { count: number; rows: any[]; currentPage: number; lastPage: number; from: number; to: number; perPage: number; total: number; loading: boolean; totalRecordsInDB: number | null; } export interface PaginationState { page: number; pageSize: number; loading: boolean; } export interface TemplateState { title: string; product: Product | null; dynamicField: string; dynamicFields: Record; defaultDynamicFieldsHashMap: Record; defaultDynamicFields: DynamicField[]; defaultSenderFields: DynamicField[]; defaultPropertyFields: DynamicField[]; defaultMiscFields: DynamicField[]; products: any[]; productDetails: any[]; productDetailByTemplate: any[]; templates: TemplatesState; templatesPagination: PaginationState; template: Template | null; totalRecordsInDB: number | null; search: string; searchProductIds: string; searchCreator: string; templateType: string; envelopeType: string; templateLoading: boolean | null; uploadedImages: any[]; offerPercentage: string | null; blockColor: string; hireDesignerForm: any; pageCount: number; } // @ts-ignore const initialState: TemplateState = { title: '', product: null, dynamicField: '', dynamicFields: {}, defaultDynamicFieldsHashMap: { '{{C.FIRST_NAME}}': { value: 'First Name', key: '{{C.FIRST_NAME}}', defaultValue: 'John', }, '{{C.LAST_NAME}}': { value: 'Last Name', key: '{{C.LAST_NAME}}', defaultValue: 'Doe', }, '{{C.FIRST_NAME}} {{C.LAST_NAME}}': { value: 'Full Name', key: '{{C.FIRST_NAME}} {{C.LAST_NAME}}', defaultValue: 'John Doe', }, '{{C.COMPANY_NAME}}': { value: 'Company Name', key: '{{C.COMPANY_NAME}}', defaultValue: 'ABC Company, Inc.', }, '{{C.ADDRESS_1}}': { value: 'Mailing Address 1', key: '{{C.ADDRESS_1}}', defaultValue: '123 Main Street', }, '{{C.ADDRESS_2}}': { value: 'Mailing Address 2', key: '{{C.ADDRESS_2}}', defaultValue: 'Suite 2', }, '{{C.CITY}}': { value: 'Mailing City', key: '{{C.CITY}}', defaultValue: 'Lawrence', }, '{{C.STATE}}': { value: 'Mailing State', key: '{{C.STATE}}', defaultValue: 'MA', }, '{{C.ZIP_CODE}}': { value: 'Mailing Zip Code', key: '{{C.ZIP_CODE}}', defaultValue: '01843', }, '{{C.PHONE_NUMBER}}': { value: 'Contact Phone Number', key: '{{C.PHONE_NUMBER}}', defaultValue: '(555) 278-9389', }, '{{C.EMAIL}}': { value: 'Contact Email', key: '{{C.EMAIL}}', defaultValue: 'johndoe@gmail.com', }, }, defaultDynamicFields: [ { value: 'First Name', key: '{{C.FIRST_NAME}}', defaultValue: 'John', }, { value: 'Last Name', key: '{{C.LAST_NAME}}', defaultValue: 'Doe', }, { value: 'Full Name', key: '{{C.FIRST_NAME}} {{C.LAST_NAME}}', defaultValue: 'John Doe', }, { value: 'Company Name', key: '{{C.COMPANY_NAME}}', defaultValue: 'ABC Company, Inc.', }, { value: 'Address 1', key: '{{C.ADDRESS_1}}', defaultValue: '123 Main Street', }, { value: 'Address 2', key: '{{C.ADDRESS_2}}', defaultValue: 'Suite 2', }, { value: 'City', key: '{{C.CITY}}', defaultValue: 'Lawrence', }, { value: 'State', key: '{{C.STATE}}', defaultValue: 'MA', }, { value: 'Zip Code', key: '{{C.ZIP_CODE}}', defaultValue: '01843', }, { value: 'Phone Number', key: '{{C.PHONE_NUMBER}}', defaultValue: '(555) 278-9389', }, { value: 'Email', key: '{{C.EMAIL}}', defaultValue: 'johndoe@gmail.com', }, ], defaultSenderFields: [ { value: 'Sender First Name', key: '{{SPF.FIRST_NAME}}', defaultValue: 'John', }, { value: 'Sender Last Name', key: '{{SPF.LAST_NAME}}', defaultValue: 'Doe', }, { value: "Sender Company Name", key: "{{SPF.COMPANY_NAME}}", defaultValue: "ABC Company, Inc.", }, { value: "Sender Address 1", key: "{{SPF.ADDRESS_1}}", defaultValue: "123 Main Street", }, { value: "Sender Address 2", key: "{{SPF.ADDRESS_2}}", defaultValue: "Suite 2", }, { value: "Sender City", key: "{{SPF.CITY}}", defaultValue: "Lawrence", }, { value: "Sender State", key: "{{SPF.STATE}}", defaultValue: "MA", }, { value: "Sender Zip Code", key: "{{SPF.ZIP_CODE}}", defaultValue: "01843", }, { value: "Sender Phone Number", key: "{{SPF.PHONE_NUMBER}}", defaultValue: "(555) 278-9389", }, { value: 'Sender Email', key: '{{SPF.EMAIL}}', defaultValue: 'johndoe@gmail.com', } ], defaultPropertyFields: [ { value: 'Property Address', key: '{{C.PROPERTY_ADDRESS}}', defaultValue: '912 Main Street', }, { value: 'Property City', key: '{{C.PROPERTY_CITY}}', defaultValue: 'New York', }, { value: 'Property State', key: '{{C.PROPERTY_STATE}}', defaultValue: 'NY', }, { value: 'Property Zip Code', key: '{{C.PROPERTY_ZIP_CODE}}', defaultValue: '10008', }, { value: 'Property Offer', key: '{{C.PROPERTY_OFFER}}', defaultValue: '$123,456.00', }, { value: 'Property Written Offer', key: '{{ROS.WRITTEN_OFFER}}', defaultValue: 'One hundred twenty-three thousand four hundred fifty-six and 00/100', }, ], defaultMiscFields: [ { value: "Mailing Date - mm/dd/yyyy", key: "{{MISC.MAILED_DATE}}", defaultValue: "12/13/2025", }, { value: "Mailing Date - Month DD, YYYY", key: "{{MISC.MAILED_DATE_MONTH_D_Y}}", defaultValue: "December 13, 2025", }, { value: "Respond by Date - mm/dd/yyyy", key: "{{MISC.RESPOND_BY_DATE}}", defaultValue: "01/12/2026", }, { value: "Respond by Date - Month DD, YYYY", key: "{{MISC.RESPOND_BY_DATE_MONTH_D_Y}}", defaultValue: "January 12, 2026", }, ], products: Products, productDetailByTemplate: [], templates: { count: 0, rows: [], currentPage: 1, lastPage: 1, from: 0, to: 0, perPage: 20, total: 0, loading: true, totalRecordsInDB: null, }, templatesPagination: {page: 0, pageSize: 20, loading: false}, template: null, totalRecordsInDB: null, search: '', searchProductIds: '', searchCreator: '', templateType: 'json', envelopeType: '', templateLoading: null, uploadedImages: [], offerPercentage: null, blockColor: '#FFFFFF45', hireDesignerForm: { queryTitle: '', queryEmail: '', queryFiles: [], queryVideoUrl: '', queryComments: '', }, pageCount: 1 }; // @ts-ignore const templateReducer = ( state = initialState, {type, payload}: {type: string; payload: any} ): TemplateState => { switch (type) { case GET_ONE_TEMPLATE: return { ...state, template: payload.data, title: payload.type === 'copy' ? state.title : payload.data.title, product: payload.data.product, templateType: payload.data.templateType, }; case CLEAR_TEMPLATE: return { ...state, template: null, }; case TEMPLATE_LOADING: return { ...state, templateLoading: payload, }; case TEMPLATE_PAGINATION_CHANGE: return { ...state, templatesPagination: {...payload.data}, }; case TEMPLATE_SEARCH: return { ...state, [payload.name]: payload.value, }; case SELECT_PRODUCT: return { ...state, product: { ...payload.product, selectedSize: payload.product.size[0].size, ...(!payload.productType && payload.product.productType !== 'Postcards' ? {selectedSize: payload.product.size[0].size} : {}), ...(payload.productType ? {productType: payload.productType} : {}), }, }; case SELECT_POSTCARD: return { ...state, product: { ...payload.product, productType: payload.productType, }, }; case SET_HIRE_DESIGNER_FORM_FIELDS: return { ...state, hireDesignerForm: { ...state.hireDesignerForm, ...payload, }, }; case SET_UPLOADED_IMAGES: return { ...state, uploadedImages: payload, }; case CLEAR_ALL_TEMPLATE: return { ...state, templates: {...initialState.templates}, }; case CLEAR_TEMPLATE_FIELDS: return { ...state, title: '', product: null, dynamicField: '', dynamicFields: {}, templateType: 'json', envelopeType: '', }; case LOAD_DATA_FROM_LOCAL_STORAGE: return { ...state, title: payload.data.title, product: payload.data.product, templateType: payload.data.templateType, envelopeType: payload.data.envelopeType, }; case CLEAR_HIRE_DESIGNER_FORM_FIELDS: return { ...state, hireDesignerForm: { queryTitle: '', queryEmail: '', queryFiles: [], queryVideoUrl: '', queryComments: '', }, }; case SET_ROS_OFFER_PERCENTAGE: return { ...state, offerPercentage: payload, }; case SET_BLOCK_COLOR: return { ...state, blockColor: payload, }; case SET_PAGE_COUNT: return { ...state, pageCount: payload, }; case SET_PRODUCTS: return { ...state, productDetails: payload?.rows || [], }; case CLEAR_REDUX: return initialState; default: return state; } }; export {templateReducer};