{"version":3,"sources":["dataProvider.js","environment.js","helpers.js","models/appointments/AdminCancelButton.js","models/providers/util/parseBookingSystem.js","models/appointments/index.js","users.js","components/SubcategoryInput.js","services.js","services_incomplete.js","categories.js","subcategories.js","models/leads/enums.js","models/leads/LeadList.js","models/leads/AddNoteButton.js","models/leads/integration_details/IntegrationTab.js","models/leads/LeadShow.js","components/AutocompleteObjectArrayInput.js","models/leads/inputs/SubcategoriesInput.js","models/leads/integration_details/IntegrationFormTab/google.js","models/leads/integration_details/IntegrationFormTab/index.js","models/leads/integration_details/IntegrationFormTab/square.js","models/leads/integration_details/IntegrationFormTab/booker.js","models/leads/integration_details/IntegrationFormTab/boulevard.js","models/leads/integration_details/IntegrationFormTab/mindbody.js","models/leads/integration_details/IntegrationFormTab/zenoti.js","models/leads/integration_details/IntegrationFormTab/acuity.js","models/leads/integration_details/IntegrationFormTab/public_acuity.js","models/leads/integration_details/IntegrationFormTab/glossgenius.js","models/leads/ConvertButton.js","models/leads/LeadEdit.js","models/leads/index.js","models/leads/LeadCreate.js","models/lead_notes/LeadNoteCreate.js","models/lead_notes/LeadNoteShow.js","models/lead_notes/index.js","models/lead_notes/LeadNoteEdit.js","models/neighborhoods/NeighborhoodEdit.js","models/neighborhoods/index.js","models/neighborhoods/NeighborhoodList.js","models/neighborhoods/NeighborhoodCreate.js","models/booking_systems/enums.js","models/booking_systems/BookingSystemList.js","components/TextFieldPreserveNewlines.js","models/booking_systems/BookingSystemShow.js","models/booking_systems/BookingSystemCreate.js","models/booking_systems/BookingSystemEdit.js","models/booking_systems/index.js","models/referrals/index.js","models/referrals/ReferralList.js","models/curated_lists/Show.js","models/curated_lists/Edit.js","models/curated_lists/index.js","models/curated_lists/List.js","models/curated_lists/Create.js","models/providers/List.js","models/providers/util/validations.js","models/providers/components/AddLocation.js","models/providers/components/LinkToServices.js","models/providers/components/ImageEditor/index.js","models/providers/components/ImageEditor/optionallyReplaceBlobWithS3Url.js","models/providers/components/CategoriesAndSubcategories.js","models/providers/components/Tabs/GoogleAndYelp/GoogleSection.js","models/providers/components/Tabs/GoogleAndYelp/YelpSection.js","models/providers/components/Tabs/GoogleAndYelp/index.js","models/providers/components/Tabs/AmbassadorCode/index.js","models/providers/components/LinkToProviderSchedule.js","models/providers/EditBase.js","models/providers/EditWithAddLocation.js","models/providers/index.js","models/providers/Create.js","models/reviews/ReviewList.js","models/reviews/index.js","models/reviews/ReviewShow.js","models/provider_schedules/ProviderScheduleEdit.js","models/provider_schedules/index.js","models/gift_cards/GiftCardList.js","models/gift_cards/index.js","models/skoop_plus_memberships/index.js","models/skoop_plus_memberships/SkoopPlusList.js","authProvider.js","App.js","index.js"],"names":["myPromise","Promise","resolve","reject","setTimeout","API_URL","makeRequest","parseInt","toString","endpoint","params","urlObject","URL","Object","keys","forEach","key","searchParams","append","auth","JSON","parse","localStorage","getItem","token","options","headers","console","log","fetch","response","ok","statusText","json","fetchPut","opts","method","body","stringify","fetchPost","AdminCancelButton","useState","isLoading","setIsLoading","open","setOpen","redirect","useRedirect","record","useRecordContext","adminCancel","_id","alert","status","dateTime","moment","toISOString","CircularProgress","Button","label","style","marginLeft","color","onClick","Confirm","confirm","cancel","isOpen","title","content","onConfirm","onClose","parseBookingSystem","provider","integrationDetails","filter","includes","HasReviewField","source","undefined","BookingSystemField","AppointmentList","props","List","pagination","bulkActionButtons","Datagrid","isRowSelectable","rowClick","TextField","sortable","DateField","showTime","FunctionField","render","appointment","AppointmentEdit","Edit","SimpleForm","toolbar","Toolbar","SaveButton","TextInput","disabled","DateTimeInput","BooleanInput","UserEdit","DateInput","UserList","FileField","target","MASSAGE_CATEGORY","FACIAL_CATEGORY","prepend","value","array","newArray","slice","unshift","SubcategoryInput","subcategories","values","useFormState","change","useForm","category","subcategory","length","choices","categorizedByGpt","gptCategorizationMarkedIncorrect","AutocompleteInput","optionValue","name","emptyValue","emptyText","ServiceEdit","categories","setCategories","setSubcategories","useEffect","getCategories","getSubcategories","isSearchable","categoriesResponse","isCurrent","subcategoriesResponse","NameIntegrated","width","checkIfIntegrated","service","isManuallyCreatedService","isEmpty","checkIfManuallyCreatedService","CategoryInput","NameSection","isIntegrated","nameManualLabel","marginRight","display","validate","required","PriceIntegrated","NumberInput","PriceNumberSection","priceManualLabel","PriceDescriptionSection","multiline","DurationIntegrated","DurationSection","durationManualLabel","DescriptionIntegrated","DescriptionSection","descriptionManualLabel","InHomeInput","inHomeOnly","GptSection","Labeled","BooleanField","ServiceCreate","providers","setProviders","getProviders","min","max","providersResponse","providersWithAddress","google","map","address","find","p","Create","maxValue","minValue","Empty","SERVICE_STATUSES","id","ServiceFilter","arrayOfObjects","lookup","object","buildLookup","Filter","SelectInput","alwaysOn","ServiceList","empty","filters","EditButton","UrlField","href","defaultProps","ServiceIncompleteList","CategoryEdit","ArrayInput","marginBottom","SimpleFormIterator","CategoryList","actions","SubcategoryEdit","SubcategoryList","LEAD_STATUSES","LEAD_STATUSES_LOOKUP","ADMIN_OWNERS","ADMIN_OWNERS_LOOKUP","OUTREACH_TYPES","LEAD_NOTE_TYPES","OUTREACH_TYPES_LOOKUP","LEAD_NOTE_TYPES_LOOKUP","StatusField","LeadFilter","neighborhoods","rest","NullableBooleanInput","ReferenceInput","reference","AutocompleteArrayInput","allowEmpty","s","LeadList","setNeighborhoods","getNeighborhoods","neighborhoodsResponse","sort","field","order","filterDefaultValues","Pagination","rowsPerPageOptions","Responsive","small","SimpleList","linkType","primaryText","medium","AddNoteButton","variant","component","Link","to","INTEGRATION_FIELDS_FOR_BOOKING_SYSTEM","IntegrationTab","integrationFieldComponents","bookingSystem","Tab","path","Actions","basePath","data","resource","TopToolbar","Title","addLabel","SkoopAdminOwnerField","owner","leadNotePrimaryText","noteType","text","phoneCallDate","outreachType","outreachDate","LeadNotePrimaryField","LeadShow","Show","TabbedShowLayout","ArrayField","SingleFieldList","ChipField","ReferenceManyField","ShowButton","AutocompleteObjectArrayInput","optionText","v","choice","format","SubcategoriesInput","sortBy","isVagaroCalendar","isAppScriptCalendar","getReadCalendarFilter","calendar","bookingSystemName","accessRole","Google","calendarsLoading","setCalendarsLoading","readCalendars","setReadCalendars","writeCalendars","setWriteCalendars","getGoogleCalendars","calendarsResponse","readCalendarsResponse","FormTab","bookingSytemNameToFormTab","credentialSets","setCredentialSets","getCredentialSets","credentialSetsResponse","ParseBusinessIdFromBookingLink","link","square","bookingLink","replace","businessId","indexOf","helperText","regex","RegExp","getLocationId","form","accountName","booker","locationIdResponse","LocationIdButton","boulevardBusinessLocations","setBoulevardBusinessLocations","getLocations","locationsResponse","ShowLocationsButton","boulevard","mindbodyLocations","setMindbodyLocations","siteId","mindbody","getSiteId","slug","siteIdResponse","SiteIdButton","zenotiLocations","setZenotiLocations","apiKey","zenoti","getStaffId","integrationProviderSlug","glossgenius","staffIdResponse","StaffIdButton","IntegrationFormTab","BookingSystemFormTab","requiredFieldsForBookingSystemMapping","endpointMapping","ConvertButton","checkReadyToConvert","requiredFieldsForBookingSystem","get","isReadyToConvert","missingField","handleClick","BottomToolbar","pristine","list","edit","TabbedForm","show","create","initialValue","LeadNoteCreate","leadId","location","search","GenericNoteSection","ScheduledPhoneCallSection","OutreachSection","NoteTypeSections","NoteTypeInput","setConfig","reset","defaultValue","phoneCallNote","outreachPhoneCallConnection","outreachNote","ShowActions","SimpleShowLayout","icon","HouseIcon","TWO_WAY_OPEN_API","BOOKING_SYSTEM_TYPES","BOOKING_SYSTEM_TYPES_LOOKUP","TypeField","type","TextFieldPreserveNewlines","whiteSpace","ApiDocumentationUrl","EventAvailableIcon","_calculateServiceFee","takePercentage","takeAmount","subtotal","ReferrerField","referral","referrerText","userReferrer","email","code","GrossRevenueField","toFixed","PreviousReferrerAppointmentsField","previousAppointmentsReferrer","ReferredAppointmentsField","appointmentsReferred","AppointmentField","createdAt","ReferenceField","appointmentReferrer","appointmentReferred","PersonAddIcon","ListButton","ChevronLeft","NumberField","providerServices","setProviderServices","getProviderServices","selectedProviderId","servicesResponse","AddServiceToCuratedListButton","batch","selectedService","addedService","updatedServiceIds","serviceIds","concat","Services","neighborhood","onChange","e","SelectField","listServices","setListServices","getListServices","AppShortcutIcon","requiredRange","validateWebsite","message","validateInstagram","validateTime","validatePMTime","validateOpenAndClose","allValues","relatedField","relatedFieldValue","start","getQueryParams","credentialSetId","squareCredentialSet","optionTextAndValue","AddLocation","exitAddLocationMode","locations","setLocations","queryParams","LocationButton","addLocation","providerId","CustomSaveButton","backgroundColor","height","padding","className","pathname","saveDisabled","setSaveDisabled","s3Url","setS3Url","replaceBlobWithS3Url","mediaUrls","mediaUrlsWithSrc","thumbnail","thumbnailWithSrc","areMediaUrlsUpdated","m","src","isThumbnailUpdated","fieldToOverwrite","newValue","updatedImageObject","rawFile","_getNewFieldValue","optionallyReplaceBlobWithS3Url","getBase64AndSaveToS3","uploadedFile","fileNamePrefix","reader","FileReader","readAsDataURL","onload","base64String","result","base64","fileName","Date","getTime","folder","s3UrlResponse","onerror","error","ImageInput","accept","ImageField","multiple","size","Chip","FindGoogleBusinessButton","setGooglePlace","findGoogleBusiness","searchTerm","googleNameToSearch","googlePlace","place_id","SearchSection","savedGooglePlaceId","showSearchSection","setShowSearchSection","googlePlaceId","getGooglePlaceDetails","googlePlaceResponse","GooglePlaceDetailsButton","REACT_JSON_DEFAULT_PROPS","ValidateYelpButton","setYelpBusiness","validateYelpIdentifer","yelpAlias","yelpBusiness","savedYelpBusinessId","yelpBusinessId","getYelpBusinessDetails","yelpBusinessResponse","YelpBusinessDetailsButton","displayDataTypes","displayObjectSize","displayArrayKey","collapsed","YelpSection","GoogleSection","SaveAmbassadorCode","setExistingAmbassadorCode","saveAmbassadorCode","ambassadorCode","RenderTab","existingAmbassadorCode","getAmbassadorCode","existingCode","providerSchedule","formState","EditBase","AddLocationButton","LinkToServices","CategoriesAndSubcategories","ImageEditor","LinkToProviderSchedule","GoogleAndYelp","AmbassadorCode","BOOKING_SYSTEMS_TO_ADD_LOCATIONS","passThroughProps","addLocationMode","setAddLocationMode","recordToCopy","setRecordToCopy","handleClickAddLocationButton","GroupIcon","ReviewTextField","reviewText","textToDisplay","review","user","fullName","ReviewsIcon","SendDate","sendDate","waitToSend","giftCardCode","redeemedAt","Recipient","recipient","receiverEmail","receiver","GiftCardType","giftCardType","GiftIcon","listContext","useListContext","activeMembers","ids","cancelDate","PlusIcon","login","username","password","request","Request","Headers","then","Error","setItem","catch","checkError","removeItem","checkAuth","logout","getIdentity","getPermissions","dataProvider","apiUrl","httpClient","fetchUtils","fetchJson","getList","page","perPage","query","range","isAdmin","url","totalCountHeader","total","getMany","getManyReference","getOne","update","MyDataProvider","Accept","authorization","App","Admin","authProvider","Resource","DateRangeIcon","GroupAddIcon","FlareIcon","InfoIcon","CategoryIcon","DynamicFeedIcon","leads","leadNotes","referrals","bookingSystems","curatedLists","reviews","giftCards","skoopPlusMemberships","providerSchedules","ReactDOM","StrictMode","document","getElementById"],"mappings":"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","file":"static/js/main.9eb0d147.chunk.js","sourcesContent":["import { fetchUtils } from 'ra-core';\nimport { stringify } from 'query-string';\n\nconst myPromise = new Promise((resolve, reject) => {\n setTimeout(() => {\n resolve('foo');\n }, 300);\n });\n\nexport default (\n apiUrl,\n httpClient = fetchUtils.fetchJson,\n) => ({\n getList: (resource, params) => {\n\n const { page, perPage } = params.pagination;\n const { field, order } = params.sort;\n let query = {\n sort: JSON.stringify([field, order]),\n range: JSON.stringify([(page - 1) * perPage, page * perPage - 1]),\n filter: JSON.stringify(params.filter),\n };\n\n if (!resource.includes('lead')){\n query = params.filter\n }\n\n if (resource == 'categories'){\n query = {isSearchable: true}\n }\n\n if (resource == 'services'){\n query = {...query, isAdmin: true}\n }\n\n const url = `${apiUrl}/${resource}?${stringify(query)}`;\n\n // HACK\n if (resource === 'services' && !params.filter.provider){\n return myPromise.then(() => {\n return {\n data: [],\n total: 0\n };\n })\n }\n\n return httpClient(url).then(({ headers, json }) => {\n const totalCountHeader = headers.get('X-Total-Count')\n return {\n data: json.map(record => ({...record, id: record._id})),\n total: !!totalCountHeader ? parseInt(totalCountHeader) : json.length\n };\n });\n },\n getMany: (resource, params) => {\n // React admin bug: getMany is triggered on ReferenceInput,\n // but it's not actually needed since referenceRecord is never used\n // https://github.com/marmelab/react-admin/blob/dc5f6abf6f0c5a67a288db6718330f2cb2148abb/packages/ra-core/src/controller/input/useReferenceInputController.ts#L132:L142\n \n const query = {\n filter: JSON.stringify({ _id: params.ids }),\n };\n const url = `${apiUrl}/${resource}?${stringify(query)}`;\n return httpClient(url).then(({ json }) => ({ \n data: json.map(record => ({...record, id: record._id})), \n }));\n },\n getManyReference: (resource, params) => {\n const { page, perPage } = params.pagination;\n const { field, order } = params.sort;\n const query = {\n sort: JSON.stringify([field, order]),\n range: JSON.stringify([(page - 1) * perPage, page * perPage - 1]),\n filter: JSON.stringify({\n ...params.filter,\n [params.target]: params.id,\n }),\n };\n const url = `${apiUrl}/${resource}?${stringify(query)}`;\n\n console.log(url)\n \n return httpClient(url).then(({ json }) => ({\n data: json.map(record => ({...record, id: record._id})),\n total: json.length\n }));\n },\n\n getOne: (resource, params) =>\n httpClient(`${apiUrl}/${resource}/${params.id}`).then(({ json }) => ({\n data: {...json, id: json._id},\n })),\n\n update: (resource, params) =>\n httpClient(`${apiUrl}/${resource}/${params.id}`, {\n method: 'PUT',\n body: JSON.stringify(params.data),\n }).then(({ json }) => ({ data: {...json, id: json._id} })),\n\n create: (resource, params) =>\n httpClient(`${apiUrl}/${resource}`, {\n method: 'POST',\n body: JSON.stringify(params.data),\n }).then(({ json }) => ({\n data: { ...params.data, id: json._id },\n })),\n});","const API_URLS = {\n prod: 'https://skoop-api-prod.herokuapp.com/api',\n staging: 'https://shrouded-fjord-09131.herokuapp.com/api',\n local: 'http://localhost:8080/api'\n}\n\nexport const API_URL = API_URLS[process.env.REACT_APP_ENV || 'local']\nexport const MAX_FILE_SIZE = \"10485760\" //10MB\nexport const MAX_FILE_MESSAGE = \"Maximum upload file size: \"+(parseInt(MAX_FILE_SIZE)/1024/1024).toString()+ \"MB\"\n","import { API_URL } from './environment'\n\nexport const makeRequest = async (endpoint, params = {}) => {\n try {\n let urlObject = new URL(`${API_URL}${endpoint}`)\n Object.keys(params).forEach(key => urlObject.searchParams.append(key, params[key]))\n const auth = JSON.parse(localStorage.getItem('auth'));\n const token = auth ? auth.token : null\n const options = { headers: { 'authorization': token } }\n console.log(\"Requesting: \", urlObject, options)\n const response = await fetch(urlObject, options);\n \n if (!response.ok){\n console.log('not ok', response.statusText)\n const errJson = await response.json();\n throw errJson\n }\n \n const json = await response.json();\n console.log(\"Request succeeded: \", urlObject, options)\n return json\n } catch (err) {\n console.log('err', err)\n throw err\n }\n}\n\nexport const fetchPut = async (endpoint, opts = {}) => {\n console.log(\"${API_URL}${endpoint}\", `${API_URL}${endpoint}`)\n try {\n const auth = JSON.parse(localStorage.getItem('auth'));\n const token = auth ? auth.token : null\n const response = await fetch(`${API_URL}${endpoint}`, {\n method: 'put',\n body: JSON.stringify(opts),\n headers: {\n 'Content-Type': 'application/json',\n 'authorization': token,\n }\n });\n \n if (!response.ok){\n console.log('not ok', response.statusText)\n const errJson = await response.json();\n throw errJson\n }\n\n const json = await response.json();\n console.log(\"Put succeeded: \", endpoint)\n return json\n } catch (err) {\n console.log('err', err)\n throw err\n }\n}\n\n// exact same as fetch put\nexport const fetchPost = async (endpoint, opts = {}) => {\n console.log(\"${API_URL}${endpoint}\", `${API_URL}${endpoint}`)\n try {\n const auth = JSON.parse(localStorage.getItem('auth'));\n const token = auth ? auth.token : null\n const response = await fetch(`${API_URL}${endpoint}`, {\n method: 'post',\n body: JSON.stringify(opts),\n headers: {\n 'Content-Type': 'application/json',\n 'authorization': token,\n }\n });\n \n if (!response.ok){\n console.log('not ok', response.statusText)\n const errJson = await response.json();\n throw errJson\n }\n\n const json = await response.json();\n console.log(\"Post succeeded: \", endpoint)\n return json\n } catch (err) {\n console.log('err', err)\n throw err\n }\n}\n","import React, { useState } from 'react';\nimport { fetchPut } from '../../helpers'\nimport { Confirm, Button, useRecordContext, useRedirect } from 'react-admin';\nimport { CircularProgress } from '@mui/material';\nimport moment from 'moment-timezone';\n\n \nexport const AdminCancelButton = () => {\n const [isLoading, setIsLoading] = useState(false)\n const [open, setOpen] = useState(false);\n\n const redirect = useRedirect();\n const record = useRecordContext();\n\n\n const adminCancel = async () => {\n try {\n setIsLoading(true)\n await fetchPut(`/admin/appointment-cancel/${record._id}`)\n setIsLoading(false)\n } catch(err){\n alert(err)\n setIsLoading(false)\n return\n }\n \n redirect(`/appointments`)\n alert('success')\n }\n\n const handleClick = () => setOpen(true);\n const handleDialogClose = () => setOpen(false);\n const handleConfirm = () => {\n adminCancel();\n setOpen(false);\n };\n\n\n\n if (record.status === 'cancelled' || record.dateTime < moment().toISOString()){\n return null\n }\n if (isLoading){\n return \n }\n return (\n <>\n \n);\n\nexport default AddNoteButton;\n","import React from 'react';\nimport { Tab, TextField, useRecordContext } from 'react-admin';\n\nconst INTEGRATION_FIELDS_FOR_BOOKING_SYSTEM = {\n 'Google Calendar': [\n ,\n ,\n \n ],\n 'Vagaro': [\n ,\n ,\n \n ],\n 'Square': [\n ,\n ,\n ,\n ,\n ,\n ,\n ],\n 'Booker': [\n ,\n ,\n ,\n ],\n 'Boulevard': [\n ,\n ,\n ,\n ],\n 'Mindbody': [\n ,\n ,\n ,\n ],\n 'Zenoti': [\n ,\n ,\n ,\n ],\n 'Acuity (Powerhouse)': [\n ,\n ,\n ,\n ],\n 'Acuity (Not Powerhouse)': [\n ,\n ,\n ,\n ],\n 'Gloss Genius': [\n ,\n ,\n ,\n ],\n}\n\nexport const IntegrationTab = (props) => {\n const record = useRecordContext()\n const VISIBLE_STATUSES = ['needAccess', 'readyToIntegrate', 'converted']\n\n const integrationFieldComponents = INTEGRATION_FIELDS_FOR_BOOKING_SYSTEM[record?.bookingSystem?.name]\n\n if (!integrationFieldComponents || !VISIBLE_STATUSES.includes(record.status)){\n return null\n }\n\n return (\n \n {integrationFieldComponents}\n \n )\n}\n","import React from 'react';\nimport {\n Datagrid,\n ReferenceManyField,\n Show,\n Tab,\n TabbedShowLayout,\n TextField,\n ShowButton,\n EditButton,\n TopToolbar,\n DateField,\n BooleanField\n} from 'react-admin';\nimport { ChipField, SingleFieldList, ArrayField } from 'react-admin';\nimport AddNoteButton from './AddNoteButton';\nimport { LEAD_STATUSES_LOOKUP, ADMIN_OWNERS_LOOKUP, LEAD_NOTE_TYPES_LOOKUP, OUTREACH_TYPES_LOOKUP } from './enums';\nimport { IntegrationTab } from './integration_details/IntegrationTab'\n\nconst Actions = ({ basePath, data, resource }) => (\n \n \n \n);\n\nconst Title = ({record}) => {record.name}\n\nconst StatusField = ({ record, source }) => {\n const status = record[source]\n return ({LEAD_STATUSES_LOOKUP[status]});\n};\nStatusField.defaultProps = { label: 'Status', addLabel: true };\n\nconst SkoopAdminOwnerField = ({ record, source }) => {\n const owner = record[source]\n return ({ADMIN_OWNERS_LOOKUP[owner]});\n};\nSkoopAdminOwnerField.defaultProps = { label: 'Skoop Admin Owner', addLabel: true };\n\nconst leadNotePrimaryText = (record) => {\n const noteType = record.noteType || 'genericNote'\n let text = `${LEAD_NOTE_TYPES_LOOKUP[noteType]}: `\n switch(noteType) {\n case 'followUp':\n text = text + record.body\n break\n case 'genericNote':\n text = text + record.body\n break\n case 'scheduledPhoneCall':\n text = text + record.phoneCallDate\n break\n case 'salesTemplateOutreach':\n text = text + `${OUTREACH_TYPES_LOOKUP[record.outreachType]} on ${record.outreachDate}`\n break\n }\n return text\n}\n\nconst LeadNotePrimaryField = ({record}) => (\n {leadNotePrimaryText(record)}\n)\n\nconst LeadShow = (props) => {\nreturn(\n } title={}>\n <TabbedShowLayout>\n <Tab label=\"Summary\">\n <TextField source=\"name\" />\n <TextField label=\"Booking System\" source=\"bookingSystem.name\" />\n <ArrayField source=\"neighborhoods\">\n <SingleFieldList linkType={false}>\n <ChipField source=\"name\" />\n </SingleFieldList>\n </ArrayField>\n <ArrayField source=\"categories\">\n <SingleFieldList linkType={false}>\n <ChipField source=\"name\" />\n </SingleFieldList>\n </ArrayField>\n <ArrayField source=\"subcategories\">\n <SingleFieldList linkType={false}>\n <ChipField source=\"name\" />\n </SingleFieldList>\n </ArrayField>\n <StatusField source=\"status\"/>\n <BooleanField source=\"listedForFree\"/>\n <SkoopAdminOwnerField source=\"skoopAdminOwner\"/>\n </Tab>\n <Tab label=\"Primary Contact\" path=\"primary_contact\">\n <TextField source=\"primaryContactFirstName\" label=\"First Name\" />\n <TextField source=\"primaryContactLastName\" label=\"Last Name\"/>\n <TextField source=\"primaryContactEmail\" label=\"Email\"/>\n <TextField source=\"primaryContactPhoneNumber\" label=\"Phone Number\"/>\n <TextField source=\"primaryContactRole\" label=\"Role\"/>\n </Tab>\n <Tab label=\"Profile Info\" path=\"profile_info\">\n <TextField source=\"description\" />\n <TextField source=\"website\" />\n <TextField source=\"instagram\" />\n </Tab>\n <IntegrationTab/>\n <Tab label=\"Notes\" path=\"lead_notes\">\n <ReferenceManyField\n addLabel={false}\n reference=\"lead_notes\"\n target=\"leadId\"\n sort={{ field: 'createdAt', order: 'DESC' }}\n >\n <Datagrid>\n <DateField source=\"createdAt\" showTime />\n <LeadNotePrimaryField label=\"Note details\"/>\n <TextField sortable={false} label=\"Author\" source=\"author.fullName\" />\n <ShowButton />\n </Datagrid>\n </ReferenceManyField>\n <AddNoteButton />\n </Tab>\n </TabbedShowLayout>\n </Show>\n)};\n\nexport default LeadShow;\n","import React from 'react';\nimport { AutocompleteArrayInput } from 'react-admin';\n\nexport const AutocompleteObjectArrayInput = ({source, choices, optionText='name'}) => {\n return (\n <AutocompleteArrayInput \n source={source} \n choices={choices} \n parse={value => value && value.map(v => choices.find(choice => choice._id === v))}\n format={value => value && value.map(v => v._id)}\n optionValue=\"_id\"\n optionText={optionText}\n />\n );\n};\n","import { useFormState } from 'react-final-form';\nimport sortBy from 'lodash.sortby'\nimport { AutocompleteObjectArrayInput } from '../../../components/AutocompleteObjectArrayInput'\n\nexport const SubcategoriesInput = ({subcategories}) => {\n const { values } = useFormState();\n\n let choices = subcategories && subcategories.filter(subcategory => values.categories && !!values.categories.find(category => subcategory.category._id === category._id))\n\n if (values.categories && values.categories.length > 1){\n choices = choices.map(choice => ({...choice, name: `${choice.category.name} - ${choice.name}`}))\n choices = sortBy(choices, 'name')\n }\n\n return (\n <AutocompleteObjectArrayInput\n source=\"subcategories\"\n optionValue=\"_id\"\n choices={choices}\n />\n )\n}","import React, { useState, useEffect } from 'react';\nimport { SelectInput, FormTab } from 'react-admin';\n\nimport { CircularProgress } from '@mui/material';\n\nimport { makeRequest } from '../../../../helpers'\n\nconst isVagaroCalendar = (name) => {\n return name.includes('[Vagaro]')\n}\n\nconst isAppScriptCalendar = (name) => {\n return name.includes('[Schedulista]') || name.includes('[Jane]') || name.includes('[Unified Practice]')\n}\n\nconst getReadCalendarFilter = ({calendar, bookingSystemName}) => {\n if (bookingSystemName === 'Vagaro'){\n return calendar.accessRole === 'owner' && isVagaroCalendar(calendar.name)\n } else {\n return ['freeBusyReader', 'reader'].includes(calendar.accessRole) || isAppScriptCalendar(calendar.name)\n }\n}\n\nexport const Google = (props) => {\n const [providers, setProviders] = useState([])\n const [calendarsLoading, setCalendarsLoading] = useState(true)\n const [readCalendars, setReadCalendars] = useState([])\n const [writeCalendars, setWriteCalendars] = useState([])\n\n useEffect(() => {\n getProviders();\n getGoogleCalendars();\n }, []);\n\n const getProviders = async () => {\n const providersResponse = await makeRequest('/providers');\n setProviders(providersResponse);\n };\n\n const getGoogleCalendars = async () => {\n const calendarsResponse = await makeRequest('/google_calendars');\n const readCalendarsResponse = calendarsResponse.filter( calendar => getReadCalendarFilter({calendar, bookingSystemName: props.bookingSystemName}))\n setReadCalendars(readCalendarsResponse);\n setWriteCalendars(calendarsResponse.filter( calendar => calendar.accessRole === 'owner' && !isAppScriptCalendar(calendar.name) && !isVagaroCalendar(calendar.name)));\n setCalendarsLoading(false);\n };\n\n return (\n <FormTab {...props} label=\"Integration Details\" path=\"integration\">\n <SelectInput source=\"provider\" label=\"Choose a provider\" choices={providers} optionValue=\"_id\"/>\n {calendarsLoading ? <>\n <CircularProgress/>\n <span>Loading calendar list via Google Calendar API</span>\n </> : null}\n <SelectInput disabled={calendarsLoading} source=\"integrationDetails.google.readCalendarId\" label=\"Choose a read calendar\" choices={readCalendars}/>\n <SelectInput disabled={calendarsLoading} source=\"integrationDetails.google.writeCalendarId\" label=\"Choose a write calendar\" choices={writeCalendars}/>\n </FormTab>\n );\n};\n","import React from 'react'\nimport { useRecordContext } from 'react-admin';\n\nimport { Google } from './google'\nimport { Square } from './square'\nimport { Booker } from './booker'\nimport { Boulevard } from './boulevard'\nimport { Mindbody } from './mindbody'\nimport { Zenoti } from './zenoti'\nimport { Acuity } from './acuity'\nimport { PublicAcuity } from './public_acuity'\nimport { GlossGenius } from './glossgenius'\n\nconst bookingSytemNameToFormTab = {\n 'Google Calendar': Google,\n 'Vagaro': Google,\n 'Square': Square,\n 'Booker': Booker,\n 'Boulevard': Boulevard,\n 'Mindbody': Mindbody,\n 'Zenoti': Zenoti,\n 'Acuity (Powerhouse)': Acuity,\n 'Acuity (Not Powerhouse)': PublicAcuity,\n 'Gloss Genius': GlossGenius,\n}\n\nexport const IntegrationFormTab = (props) => {\n const record = useRecordContext()\n const bookingSystemName = record?.bookingSystem?.name\n const BookingSystemFormTab = bookingSytemNameToFormTab[bookingSystemName]\n const VISIBLE_STATUSES = ['needAccess', 'readyToIntegrate', 'converted']\n\n if (!BookingSystemFormTab || !VISIBLE_STATUSES.includes(record.status)){\n return null\n }\n\n return (\n <BookingSystemFormTab {...props} bookingSystemName={bookingSystemName}/>\n )\n}\n","import React, { useState, useEffect } from 'react';\nimport { SelectInput, FormTab, TextInput, regex, Labeled } from 'react-admin';\nimport { useFormState } from 'react-final-form'\nimport { CircularProgress } from '@mui/material';\nimport { makeRequest } from '../../../../helpers'\n\nconst SQUARE_BASE_URL_REGEX = \"^https://squareup.com/appointments/book/\"\n\nexport const Square = (props) => {\n const [providers, setProviders] = useState([])\n const [credentialSets, setCredentialSets] = useState([])\n const [calendarsLoading, setCalendarsLoading] = useState(true)\n const [writeCalendars, setWriteCalendars] = useState([])\n\n useEffect(() => {\n getProviders();\n getCredentialSets();\n getGoogleCalendars();\n }, []);\n\n const getProviders = async () => {\n const providersResponse = await makeRequest('/providers');\n setProviders(providersResponse);\n };\n\n const getCredentialSets = async () => {\n const credentialSetsResponse = await makeRequest('/square_credential_sets');\n setCredentialSets(credentialSetsResponse)\n };\n\n const getGoogleCalendars = async () => {\n const calendarsResponse = await makeRequest('/google_calendars');\n setWriteCalendars(calendarsResponse.filter( calendar => calendar.accessRole === 'owner'));\n setCalendarsLoading(false);\n };\n\n const ParseBusinessIdFromBookingLink = ({record}) => {\n const { values } = useFormState()\n const link = values?.integrationDetails?.square?.bookingLink || record?.integrationDetails?.square?.bookingLink\n if (!link){\n return null\n }\n const path = link.replace('https://squareup.com/appointments/book/', '')\n const businessId = path.slice(0, path.indexOf(`/`))\n return <Labeled label=\"Business Id\"><span>{businessId}</span></Labeled>\n }\n\n return (\n <FormTab {...props} label=\"Integration Details\" path=\"integration\">\n <SelectInput source=\"provider\" label=\"Choose a provider\" choices={providers} optionValue=\"_id\"/>\n <SelectInput source=\"integrationDetails.square.squareCredentialSet\" label=\"Select Square business\" choices={credentialSets} optionValue=\"_id\" optionText=\"businessName\"/>\n <TextInput\n source=\"integrationDetails.square.bookingLink\"\n label=\"Square booking link\"\n helperText=\"(https://squareup.com/appointments/book/...)\"\n validate={regex(new RegExp(SQUARE_BASE_URL_REGEX), 'Not a valid Square booking link')}\n />\n <ParseBusinessIdFromBookingLink/>\n {calendarsLoading ? <>\n <CircularProgress/>\n <span>Loading calendar list via Google Calendar API</span>\n </> : null}\n <SelectInput disabled={calendarsLoading} source=\"integrationDetails.google.writeCalendarId\" label=\"Choose a write calendar\" choices={writeCalendars}/>\n </FormTab>\n );\n};\n","import React, { useState, useEffect } from 'react';\nimport { SelectInput, TextInput, FormTab, Button } from 'react-admin';\nimport { useForm, useFormState } from 'react-final-form'\n\nimport { makeRequest } from '../../../../helpers'\n\nexport const Booker = (props) => {\n const [providers, setProviders] = useState([])\n\n useEffect(() => {\n getProviders();\n }, []);\n\n const getProviders = async () => {\n const providersResponse = await makeRequest('/providers');\n setProviders(providersResponse);\n };\n\n const getLocationId = async ({form, values}) => {\n const accountName = values?.integrationDetails?.booker?.accountName\n\n if (!accountName){\n alert('Fill out account name to get location id')\n return\n }\n\n const locationIdResponse = await makeRequest('/booker/location', {accountName});\n form.change('integrationDetails.booker.integrationLocationId', locationIdResponse)\n };\n\n const LocationIdButton = () => {\n const form = useForm()\n const { values } = useFormState()\n\n return <Button label=\"Get Location Id\" onClick={() => getLocationId({form, values})} />\n }\n\n return (\n <FormTab {...props} label=\"Integration Details\" path=\"integration\">\n <SelectInput source=\"provider\" label=\"Choose a provider\" choices={providers} optionValue=\"_id\"/>\n <TextInput source=\"integrationDetails.booker.accountName\" label=\"Booker account name\" helperText=\"https://go.booker.com/location/<ACCOUNT_NAME>/service-menu\"/>\n <LocationIdButton/>\n <TextInput source=\"integrationDetails.booker.integrationLocationId\" label=\"Booker location id\"/>\n </FormTab>\n );\n};\n","import React, { useState, useEffect } from 'react';\nimport { SelectInput, TextInput, FormTab, Button } from 'react-admin';\nimport { useFormState } from 'react-final-form'\n\nimport { makeRequest } from '../../../../helpers'\n\nexport const Boulevard = (props) => {\n const [providers, setProviders] = useState([])\n const [boulevardBusinessLocations, setBoulevardBusinessLocations] = useState([])\n\n useEffect(() => {\n getProviders();\n }, []);\n\n const getProviders = async () => {\n const providersResponse = await makeRequest('/providers');\n setProviders(providersResponse);\n };\n\n const getLocations = async (businessId) => {\n try {\n const locationsResponse = await makeRequest('/boulevard/locations', {businessId});\n setBoulevardBusinessLocations(locationsResponse)\n } catch (err){\n alert(err)\n return\n }\n };\n\n const ShowLocationsButton = () => {\n const { values } = useFormState()\n const businessId = values.integrationDetails?.boulevard?.businessId\n\n if (!businessId){\n return null\n }\n\n return <Button label=\"Get Locations\" onClick={() => getLocations(businessId)} />\n }\n\n return (\n <FormTab {...props} label=\"Integration Details\" path=\"integration\">\n <SelectInput source=\"provider\" label=\"Choose a provider\" choices={providers} optionValue=\"_id\"/>\n <TextInput source=\"integrationDetails.boulevard.businessId\" label=\"Boulevard Business ID\"/>\n <ShowLocationsButton/>\n {\n boulevardBusinessLocations.length ? \n <SelectInput source=\"integrationDetails.boulevard.locationId\" label=\"Boulevard Location\" choices={boulevardBusinessLocations}/>\n : null\n }\n </FormTab>\n );\n};\n","import React, { useState, useEffect } from 'react';\nimport { SelectInput, TextInput, FormTab, Button } from 'react-admin';\nimport { useFormState, useForm } from 'react-final-form'\n\nimport { makeRequest } from '../../../../helpers'\n\nexport const Mindbody = (props) => {\n const [providers, setProviders] = useState([])\n const [mindbodyLocations, setMindbodyLocations] = useState([])\n\n useEffect(() => {\n getProviders();\n }, []);\n\n const getProviders = async () => {\n const providersResponse = await makeRequest('/providers');\n setProviders(providersResponse);\n };\n\n const getLocations = async (siteId) => {\n try {\n const locationsResponse = await makeRequest('/mindbody/locations', {siteId});\n setMindbodyLocations(locationsResponse)\n } catch (err){\n alert(err)\n return\n }\n };\n\n const ShowLocationsButton = () => {\n const { values } = useFormState()\n const siteId = values.integrationDetails?.mindbody?.siteId\n\n if (!siteId){\n return null\n }\n\n return <Button label=\"Get Locations\" onClick={() => getLocations(siteId)} />\n }\n\n const getSiteId = async ({form, values}) => {\n const slug = values?.integrationDetails?.mindbody?.slug\n\n if (!slug){\n alert('Fill out slug to get site id')\n return\n }\n\n try {\n const siteIdResponse = await makeRequest('/mindbody/site_id', {slug});\n form.change('integrationDetails.mindbody.siteId', siteIdResponse)\n } catch (err){\n alert(err)\n }\n };\n\n const SiteIdButton = () => {\n const form = useForm()\n const { values } = useFormState()\n\n return <Button label=\"Get Site Id\" onClick={() => getSiteId({form, values})} />\n }\n\n return (\n <FormTab {...props} label=\"Integration Details\" path=\"integration\">\n <SelectInput source=\"provider\" label=\"Choose a provider\" choices={providers} optionValue=\"_id\"/>\n <TextInput source=\"integrationDetails.mindbody.slug\" label=\"Mindbody Slug\" helperText=\"https://www.mindbodyonline.com/explore/locations/<SLUG>\"/>\n <SiteIdButton />\n <TextInput disabled source=\"integrationDetails.mindbody.siteId\" label=\"Mindbody Site ID\"/>\n <ShowLocationsButton/>\n {\n mindbodyLocations.length ? \n <SelectInput source=\"integrationDetails.mindbody.locationId\" optionText=\"Name\" optionValue=\"Id\" label=\"Mindbody Location\" choices={mindbodyLocations}/>\n : null\n }\n </FormTab>\n );\n};\n","import React, { useState, useEffect } from 'react';\nimport { SelectInput, TextInput, FormTab, Button } from 'react-admin';\nimport { useFormState } from 'react-final-form'\n\nimport { makeRequest } from '../../../../helpers'\n\nexport const Zenoti = (props) => {\n const [providers, setProviders] = useState([])\n const [zenotiLocations, setZenotiLocations] = useState([])\n\n useEffect(() => {\n getProviders();\n }, []);\n\n const getProviders = async () => {\n const providersResponse = await makeRequest('/providers');\n setProviders(providersResponse);\n };\n\n const getLocations = async (apiKey) => {\n try {\n const locationsResponse = await makeRequest('/zenoti/locations', {apiKey});\n setZenotiLocations(locationsResponse)\n } catch (err){\n alert(err)\n return\n }\n };\n\n const ShowLocationsButton = () => {\n const { values } = useFormState()\n const apiKey = values.integrationDetails?.zenoti?.apiKey\n\n if (!apiKey){\n return null\n }\n\n return <Button label=\"Get Locations\" onClick={() => getLocations(apiKey)} />\n }\n\n return (\n <FormTab {...props} label=\"Integration Details\" path=\"integration\">\n <SelectInput source=\"provider\" label=\"Choose a provider\" choices={providers} optionValue=\"_id\"/>\n <TextInput source=\"integrationDetails.zenoti.apiKey\" label=\"Zenoti API Key\"/>\n <ShowLocationsButton/>\n {\n zenotiLocations.length ? \n <SelectInput source=\"integrationDetails.zenoti.centerId\" label=\"Zenoti Location\" choices={zenotiLocations}/>\n : null\n }\n </FormTab>\n );\n};\n","import React, { useState, useEffect } from 'react';\nimport { SelectInput, TextInput, FormTab } from 'react-admin';\n\nimport { makeRequest } from '../../../../helpers'\n\nexport const Acuity = (props) => {\n const [providers, setProviders] = useState([])\n\n useEffect(() => {\n // Empty commit\n getProviders();\n }, []);\n\n const getProviders = async () => {\n const providersResponse = await makeRequest('/providers');\n setProviders(providersResponse);\n };\n\n return (\n <FormTab {...props} label=\"Integration Details\" path=\"integration\">\n <SelectInput source=\"provider\" label=\"Choose a provider\" choices={providers} optionValue=\"_id\"/>\n <TextInput source=\"integrationDetails.acuity.apiKey\" label=\"Acuity API Key\"/>\n <TextInput source=\"integrationDetails.acuity.userId\" label=\"Acuity User ID\"/>\n </FormTab>\n );\n};\n","import React, { useState, useEffect } from 'react';\nimport { SelectInput, TextInput, FormTab } from 'react-admin';\n\nimport { CircularProgress } from '@mui/material';\n\nimport { makeRequest } from '../../../../helpers'\n\nexport const PublicAcuity = (props) => {\n const [providers, setProviders] = useState([])\n const [calendarsLoading, setCalendarsLoading] = useState(true)\n const [writeCalendars, setWriteCalendars] = useState([])\n\n useEffect(() => {\n getProviders();\n getGoogleCalendars();\n }, []);\n\n const getProviders = async () => {\n const providersResponse = await makeRequest('/providers');\n setProviders(providersResponse);\n };\n\n\n const getGoogleCalendars = async () => {\n const calendarsResponse = await makeRequest('/google_calendars');\n setWriteCalendars(calendarsResponse.filter( calendar => calendar.accessRole === 'owner'));\n setCalendarsLoading(false);\n };\n\n return (\n <FormTab {...props} label=\"Integration Details\" path=\"integration\">\n <SelectInput source=\"provider\" label=\"Choose a provider\" choices={providers} optionValue=\"_id\"/>\n <TextInput source=\"integrationDetails.public_acuity.integrationProviderId\" label=\"Acuity Owner\" helperText=\"https://app.acuityscheduling.com/schedule.php?owner=<OWNER>\"/>\n {calendarsLoading ? <>\n <CircularProgress/>\n <span>Loading calendar list via Google Calendar API</span>\n </> : null}\n <SelectInput disabled={calendarsLoading} source=\"integrationDetails.google.writeCalendarId\" label=\"Choose a write calendar\" choices={writeCalendars}/>\n </FormTab>\n );\n};\n","import React, { useState, useEffect } from 'react';\nimport { SelectInput, TextInput, FormTab, Button } from 'react-admin';\nimport { useForm, useFormState } from 'react-final-form'\nimport { CircularProgress } from '@mui/material';\n\nimport { makeRequest } from '../../../../helpers'\n\nexport const GlossGenius = (props) => {\n const [providers, setProviders] = useState([])\n const [isLoading, setIsLoading] = useState(false)\n\n useEffect(() => {\n getProviders();\n }, []);\n\n const getProviders = async () => {\n const providersResponse = await makeRequest('/providers');\n setProviders(providersResponse);\n };\n\n const getStaffId = async ({form, values}) => {\n const integrationProviderSlug = values?.integrationDetails?.glossgenius?.integrationProviderSlug\n\n if (!integrationProviderSlug){\n alert('Fill out business name to get staff ID')\n return\n }\n\n setIsLoading(true)\n const staffIdResponse = await makeRequest('/glossgenius/staff_member', {integrationProviderSlug});\n setIsLoading(false)\n form.change('integrationDetails.glossgenius.integrationStaffId', staffIdResponse)\n };\n\n const StaffIdButton = () => {\n const form = useForm()\n const { values } = useFormState()\n\n return <>\n <Button disabled={isLoading} label=\"Get Staff Id\" onClick={() => getStaffId({form, values})} />\n {isLoading ? <CircularProgress/> : null}\n </>\n }\n\n return (\n <FormTab {...props} label=\"Integration Details\" path=\"integration\">\n <SelectInput source=\"provider\" label=\"Choose a provider\" choices={providers} optionValue=\"_id\"/>\n <TextInput source=\"integrationDetails.glossgenius.integrationProviderSlug\" label=\"GlossGenius business name\" helperText=\"https://<BUSINESS_NAME>.glossgenius.com\"/>\n <StaffIdButton/>\n <TextInput disabled source=\"integrationDetails.glossgenius.integrationStaffId\" label=\"GlossGenius staff id\"/>\n </FormTab>\n );\n};\n","import React, { useState } from 'react';\nimport { fetchPut } from '../../helpers'\nimport { Button, useRecordContext, useRedirect } from 'react-admin';\nimport get from 'lodash.get'\nimport { useFormState } from 'react-final-form';\nimport { CircularProgress } from '@mui/material';\n\nconst requiredFieldsForBookingSystemMapping = {\n 'Google Calendar': [\n 'integrationDetails.google.writeCalendarId',\n 'integrationDetails.google.readCalendarId',\n 'provider',\n 'primaryContactEmail'\n ],\n 'Vagaro': [\n 'integrationDetails.google.writeCalendarId',\n 'integrationDetails.google.readCalendarId',\n 'provider',\n 'primaryContactEmail'\n ],\n 'Square': [\n 'integrationDetails.google.writeCalendarId',\n 'integrationDetails.square.bookingLink',\n 'integrationDetails.square.squareCredentialSet',\n 'provider',\n 'primaryContactEmail'\n ],\n 'Booker': [\n 'integrationDetails.booker.integrationLocationId',\n 'provider',\n ],\n 'Boulevard': [\n 'integrationDetails.boulevard.businessId',\n 'integrationDetails.boulevard.locationId',\n 'provider',\n ],\n 'Mindbody': [\n 'integrationDetails.mindbody.siteId',\n 'integrationDetails.mindbody.locationId',\n 'provider',\n ],\n 'Zenoti': [\n 'integrationDetails.zenoti.apiKey',\n 'integrationDetails.zenoti.centerId',\n 'provider',\n ],\n 'Acuity (Powerhouse)': [\n 'integrationDetails.acuity.apiKey',\n 'integrationDetails.acuity.userId',\n 'provider',\n ],\n 'Acuity (Not Powerhouse)': [\n 'integrationDetails.google.writeCalendarId',\n 'integrationDetails.public_acuity.integrationProviderId',\n 'provider',\n ],\n 'Gloss Genius': [\n 'integrationDetails.glossgenius.integrationProviderSlug',\n 'integrationDetails.glossgenius.integrationStaffId',\n 'provider',\n ]\n}\n\nconst endpointMapping = {\n 'Vagaro': 'google',\n 'Google Calendar': 'google',\n 'Square': 'square',\n 'Booker': 'booker',\n 'Boulevard': 'boulevard',\n 'Mindbody': 'mindbody',\n 'Zenoti': 'zenoti',\n 'Acuity (Powerhouse)': 'acuity',\n 'Acuity (Not Powerhouse)': 'public_acuity',\n 'Gloss Genius': 'glossgenius'\n}\n\nexport const ConvertButton = () => {\n const [isLoading, setIsLoading] = useState(false)\n\n const redirect = useRedirect();\n const { values } = useFormState();\n const record = useRecordContext();\n\n const bookingSystem = values?.bookingSystem?.name\n\n const checkReadyToConvert = () => {\n const requiredFieldsForBookingSystem = requiredFieldsForBookingSystemMapping[bookingSystem]\n\n for (const field of requiredFieldsForBookingSystem){\n if ( !get(values, field) ){\n return { isReadyToConvert: false, missingField: field}\n }\n }\n\n return { isReadyToConvert: true }\n }\n\n const handleClick = async () => {\n const { isReadyToConvert, missingField } = checkReadyToConvert()\n if (!isReadyToConvert){\n alert(`Make sure to fill out all the integration fields. Missing: ${missingField}`)\n return\n }\n\n const endpoint = endpointMapping[bookingSystem]\n try {\n setIsLoading(true)\n await fetchPut(`/convert_lead/${endpoint}/${record._id}`, values)\n setIsLoading(false)\n } catch(err){\n alert(err)\n setIsLoading(false)\n return\n }\n\n redirect(`/leads/${record._id}/show`)\n alert('success')\n // TODO - react-admin notify not working, look into https://github.com/fkhadra/react-toastify\n // notify(`Converted!! ${record.name}`, { type: 'success' });\n }\n\n const VISIBLE_STATUSES = ['needAccess', 'readyToIntegrate']\n\n if (!VISIBLE_STATUSES.includes(record.status)){\n return null\n }\n\n return <>\n <Button disabled={isLoading} label=\"Convert\" onClick={handleClick} />\n {isLoading ? <CircularProgress/> : null}\n </>\n}\n","import React, { useState, useEffect } from 'react';\nimport {\n Edit,\n TextInput,\n Toolbar,\n SaveButton,\n TabbedForm,\n FormTab,\n SelectInput,\n ReferenceInput,\n BooleanInput,\n required\n} from 'react-admin';\nimport { makeRequest } from '../../helpers'\nimport { SubcategoriesInput } from './inputs/SubcategoriesInput';\nimport { AutocompleteObjectArrayInput } from '../../components/AutocompleteObjectArrayInput'\nimport { LEAD_STATUSES, ADMIN_OWNERS } from './enums';\nimport { IntegrationFormTab } from './integration_details/IntegrationFormTab'\nimport { ConvertButton } from './ConvertButton'\n\nconst BottomToolbar = props => (\n <Toolbar {...props} >\n <SaveButton disabled={props.pristine} />\n <ConvertButton/>\n </Toolbar>\n);\n\nconst Title = ({record}) => <span>{record.name}</span>\n\nexport const LeadEdit = (props) => {\n const [neighborhoods, setNeighborhoods] = useState([]);\n const [categories, setCategories] = useState([]);\n const [subcategories, setSubcategories] = useState([]);\n\n useEffect(() => {\n getNeighborhoods();\n getCategories();\n getSubcategories();\n }, []);\n\n const getNeighborhoods = async () => {\n const neighborhoodsResponse = await makeRequest('/neighborhoods');\n setNeighborhoods(neighborhoodsResponse);\n };\n\n const getCategories = async () => {\n const categoriesResponse = await makeRequest('/categories');\n setCategories(categoriesResponse);\n }\n\n const getSubcategories = async () => {\n const subcategoriesResponse = await makeRequest('/subcategories');\n setSubcategories(subcategoriesResponse);\n };\n\n\n return (\n <Edit {...props} title={<Title/>}>\n <TabbedForm toolbar={<BottomToolbar />}>\n <FormTab label=\"Summary\">\n <TextInput source=\"name\" validate={required()}/>\n <ReferenceInput allowEmpty label=\"Booking System\" source=\"bookingSystem._id\" reference=\"booking_systems\">\n <SelectInput optionValue=\"_id\"/>\n </ReferenceInput>\n <AutocompleteObjectArrayInput source=\"neighborhoods\" choices={neighborhoods} optionValue=\"_id\" />\n <AutocompleteObjectArrayInput source=\"categories\" choices={categories} optionValue=\"_id\" />\n <SubcategoriesInput subcategories={subcategories}/>\n <SelectInput source=\"status\" choices={LEAD_STATUSES}/>\n <BooleanInput source=\"listedForFree\"/>\n <SelectInput source=\"skoopAdminOwner\" choices={ADMIN_OWNERS} />\n </FormTab>\n <FormTab label=\"Primary Contact\" path=\"primary_contact\">\n <TextInput source=\"primaryContactFirstName\" label=\"First Name\" />\n <TextInput source=\"primaryContactLastName\" label=\"Last Name\"/>\n <TextInput source=\"primaryContactEmail\" label=\"Email\"/>\n <TextInput source=\"primaryContactPhoneNumber\" label=\"Phone Number\"/>\n <TextInput source=\"primaryContactRole\" label=\"Role\"/>\n </FormTab>\n <FormTab label=\"Profile Info\" path=\"profile_info\">\n <TextInput multiline source=\"description\" />\n <TextInput source=\"website\" />\n <TextInput source=\"instagram\" />\n </FormTab>\n <IntegrationFormTab/>\n </TabbedForm>\n </Edit>\n );\n};\n","import LeadList from './LeadList';\nimport LeadShow from './LeadShow';\nimport {LeadCreate} from './LeadCreate';\nimport {LeadEdit} from './LeadEdit';\n\nexport default {\n list: LeadList,\n edit: LeadEdit,\n show: LeadShow,\n create: LeadCreate,\n};\n","import React, { useEffect, useState } from 'react';\nimport {\n Create,\n SimpleForm,\n TextInput,\n SelectInput,\n ReferenceInput,\n required\n} from 'react-admin';\nimport { makeRequest } from '../../helpers'\nimport { SubcategoriesInput } from './inputs/SubcategoriesInput';\nimport { AutocompleteObjectArrayInput } from '../../components/AutocompleteObjectArrayInput'\nimport { LEAD_STATUSES, ADMIN_OWNERS } from './enums';\n\nexport const LeadCreate = (props) => {\n const [neighborhoods, setNeighborhoods] = useState([]);\n const [categories, setCategories] = useState([]);\n const [subcategories, setSubcategories] = useState([]);\n\n useEffect(() => {\n getNeighborhoods();\n getCategories();\n getSubcategories();\n }, []);\n\n const getNeighborhoods = async () => {\n const neighborhoodsResponse = await makeRequest('/neighborhoods');\n setNeighborhoods(neighborhoodsResponse);\n };\n\n const getCategories = async () => {\n const categoriesResponse = await makeRequest('/categories');\n setCategories(categoriesResponse);\n }\n\n const getSubcategories = async () => {\n const subcategoriesResponse = await makeRequest('/subcategories');\n setSubcategories(subcategoriesResponse);\n };\n\n return (\n <Create {...props}>\n <SimpleForm>\n <TextInput source=\"name\" validate={required()}/>\n <ReferenceInput label=\"Booking System\" source=\"bookingSystem\" reference=\"booking_systems\">\n <SelectInput optionValue=\"_id\"/>\n </ReferenceInput>\n <AutocompleteObjectArrayInput source=\"neighborhoods\" choices={neighborhoods} optionValue=\"_id\" />\n <AutocompleteObjectArrayInput source=\"categories\" choices={categories} optionValue=\"_id\" />\n <SubcategoriesInput subcategories={subcategories}/>\n <SelectInput initialValue=\"open\" source=\"status\" choices={LEAD_STATUSES}/>\n <SelectInput source=\"skoopAdminOwner\" choices={ADMIN_OWNERS} />\n </SimpleForm>\n </Create>\n );\n};\n","import React from 'react';\nimport {\n Create,\n DateInput,\n TextInput,\n ReferenceInput,\n SelectInput,\n SimpleForm,\n BooleanInput,\n required\n} from 'react-admin';\nimport { parse } from 'query-string';\nimport { OUTREACH_TYPES, LEAD_NOTE_TYPES } from '../leads/enums';\nimport moment from 'moment-timezone'\nimport { useFormState, useForm } from 'react-final-form';\nimport { OnChange } from 'react-final-form-listeners'\n\nconst today = moment().format('MM-DD-YYYY')\n\nconst LeadNoteCreate = props => {\n // Read the leadId from the location which is injected by React Router and passed to our component by react-admin automatically\n const { leadId } = parse(props.location.search);\n\n const redirect = leadId ? `/leads/${leadId}/show/lead_notes` : false;\n\n const GenericNoteSection = () => (\n <TextInput multiline source=\"body\" validate={required()}/>\n )\n\n const ScheduledPhoneCallSection = () => (\n <>\n <DateInput source=\"phoneCallDate\" label=\"Date of Phone Call\" validate={required()}/>\n <TextInput multiline source=\"phoneCallNote\" />\n </>\n )\n\n const OutreachSection = () => (\n <>\n <DateInput source=\"outreachDate\" label=\"Date of Outreach\" validate={required()}/>\n <SelectInput source=\"outreachType\" choices={OUTREACH_TYPES} validate={required()}/>\n <BooleanInput source=\"outreachPhoneCallConnection\" label=\"Talked to a stakeholder on the phone?\"/>\n <TextInput multiline source=\"outreachNote\" />\n </>\n )\n\n const NoteTypeSections = () => {\n const { values } = useFormState()\n\n switch(values.noteType) {\n case 'genericNote':\n return <GenericNoteSection />\n case 'followUp':\n return <GenericNoteSection />\n case 'scheduledPhoneCall':\n return <ScheduledPhoneCallSection />\n case 'salesTemplateOutreach':\n return <OutreachSection />\n default:\n return null\n }\n }\n\n const NoteTypeInput = () => {\n const form = useForm()\n\n return (\n <>\n <SelectInput source=\"noteType\" choices={LEAD_NOTE_TYPES} validate={required()} />\n <OnChange name=\"noteType\">\n {(value) => {\n // https://stackoverflow.com/questions/58408001/how-to-add-a-reset-values-button-to-a-react-admin-edit-form\n form.setConfig('keepDirtyOnReinitialize', false)\n form.reset({ leadId, noteType: value })\n form.setConfig('keepDirtyOnReinitialize', true)\n }}\n </OnChange>\n </>\n )\n }\n\n return (\n <Create {...props}>\n <SimpleForm\n defaultValue={{ leadId }}\n redirect={redirect}\n >\n <ReferenceInput\n source=\"leadId\"\n reference=\"leads\"\n disabled={true}\n >\n <SelectInput optionText=\"name\" />\n </ReferenceInput>\n\n <NoteTypeInput />\n <NoteTypeSections />\n\n </SimpleForm>\n </Create>\n );\n};\n\nexport default LeadNoteCreate;\n","import React from 'react';\nimport {\n Show,\n TextField,\n SimpleShowLayout,\n DateField,\n BooleanField,\n Labeled,\n useRecordContext,\n TopToolbar,\n EditButton\n} from 'react-admin';\nimport { LEAD_NOTE_TYPES_LOOKUP, OUTREACH_TYPES_LOOKUP } from '../leads/enums';\n\nconst GenericNoteSection = ({record}) => (\n <Labeled label=\"Note\"><span>{record.body}</span></Labeled>\n)\n\nconst ScheduledPhoneCallSection = ({record}) => (\n <>\n <Labeled label=\"Date of Phone Call\"><span>{record.phoneCallDate}</span></Labeled>\n <Labeled label=\"Phone call note\"><span>{record.phoneCallNote}</span></Labeled>\n </>\n)\n\nconst OutreachSection = ({record}) => (\n <>\n <Labeled label=\"Date of Outreach\"><span>{record.outreachDate}</span></Labeled>\n <Labeled label=\"Outreach type\"><span>{OUTREACH_TYPES_LOOKUP[record.outreachType]}</span></Labeled>\n <Labeled label=\"Talked to a stakeholder on the phone?\"><span>{record.outreachPhoneCallConnection ? 'yes' : 'no'}</span></Labeled>\n <Labeled label=\"Outreach note\"><span>{record.outreachNote}</span></Labeled>\n </>\n)\n\nconst NoteTypeSections = () => {\n const record = useRecordContext()\n const noteType = record.noteType || 'genericNote'\n switch(noteType) {\n case 'genericNote':\n return <GenericNoteSection record={record}/>\n case 'followUp':\n return <GenericNoteSection record={record}/>\n case 'scheduledPhoneCall':\n return <ScheduledPhoneCallSection record={record}/>\n case 'salesTemplateOutreach':\n return <OutreachSection record={record}/>\n default:\n return null\n }\n}\n\nconst ShowActions = ({ basePath, data }) => {\n const record = useRecordContext()\n return <TopToolbar>\n {record.noteType === 'scheduledPhoneCall' && <EditButton basePath={basePath} record={data} />}\n </TopToolbar>\n}\n\nconst LeadNoteShow = props => (\n <Show {...props} title=\"Lead Note\" actions={<ShowActions/>}>\n <SimpleShowLayout>\n <DateField source=\"createdAt\" showTime />\n \n <NoteTypeSections />\n\n <TextField label=\"Author\" source=\"author.fullName\" />\n </SimpleShowLayout>\n </Show>\n);\n\nexport default LeadNoteShow;\n","import LeadNoteCreate from './LeadNoteCreate';\nimport LeadNoteShow from './LeadNoteShow';\nimport LeadNoteEdit from './LeadNoteEdit';\n\nexport default {\n create: LeadNoteCreate,\n show: LeadNoteShow,\n edit: LeadNoteEdit\n};\n","import React from 'react';\nimport {\n Edit,\n DateInput,\n TextInput,\n ReferenceInput,\n SelectInput,\n SimpleForm,\n BooleanInput,\n Toolbar,\n SaveButton,\n TopToolbar,\n required\n} from 'react-admin';\nimport { OUTREACH_TYPES, LEAD_NOTE_TYPES } from '../leads/enums';\nimport { useFormState } from 'react-final-form';\n\nconst LeadNoteEdit = props => {\n\n const GenericNoteSection = () => (\n <TextInput disabled multiline source=\"body\"/>\n )\n\n const ScheduledPhoneCallSection = () => (\n <>\n <DateInput source=\"phoneCallDate\" label=\"Date of Phone Call\" validate={required()}/>\n <TextInput disabled multiline source=\"phoneCallNote\" />\n </>\n )\n\n const OutreachSection = () => (\n <>\n <DateInput disabled source=\"outreachDate\" label=\"Date of Outreach\" validate={required()}/>\n <SelectInput disabled source=\"outreachType\" choices={OUTREACH_TYPES} validate={required()}/>\n <BooleanInput disabled source=\"outreachPhoneCallConnection\" label=\"Talked to a stakeholder on the phone?\"/>\n <TextInput disabled multiline source=\"outreachNote\" />\n </>\n )\n\n const NoteTypeSections = () => {\n const { values } = useFormState()\n const noteType = values.noteType || 'genericNote'\n\n switch(noteType) {\n case 'followUp':\n return <GenericNoteSection />\n case 'genericNote':\n return <GenericNoteSection />\n case 'scheduledPhoneCall':\n return <ScheduledPhoneCallSection />\n case 'salesTemplateOutreach':\n return <OutreachSection />\n default:\n return null\n }\n }\n\n\n const BottomToolbar = props => (\n <Toolbar {...props} >\n <SaveButton disabled={props.pristine} />\n </Toolbar>\n );\n\n return (\n <Edit {...props}>\n <SimpleForm toolbar={<BottomToolbar/>}>\n <ReferenceInput\n source=\"leadId\"\n reference=\"leads\"\n disabled={true}\n >\n <SelectInput optionText=\"name\" />\n </ReferenceInput>\n <DateInput disabled source=\"createdAt\" showTime />\n <TextInput disabled label=\"Author\" source=\"author.fullName\" />\n\n {/* <SelectInput disabled source=\"noteType\" choices={LEAD_NOTE_TYPES} validate={required()} /> */}\n <NoteTypeSections />\n\n </SimpleForm>\n </Edit>\n );\n};\n\nexport default LeadNoteEdit;\n","import React from 'react';\nimport {\n Edit,\n TextInput,\n SimpleForm,\n Toolbar,\n SaveButton,\n required\n} from 'react-admin';\n\nconst BottomToolbar = props => (\n <Toolbar {...props} >\n <SaveButton disabled={props.pristine} />\n </Toolbar>\n);\n\nconst Title = ({record}) => <span>{record.name}</span>\n\nexport const NeighborhoodEdit = props => (\n <Edit {...props} title={<Title/>}>\n <SimpleForm toolbar={<BottomToolbar/>}>\n <TextInput source=\"name\" validate={required()}/>\n </SimpleForm>\n </Edit>\n);\n","import { NeighborhoodList } from './NeighborhoodList';\nimport { NeighborhoodCreate } from './NeighborhoodCreate';\nimport { NeighborhoodEdit } from './NeighborhoodEdit';\nimport HouseIcon from '@mui/icons-material/House';\n\nexport default {\n list: NeighborhoodList,\n edit: NeighborhoodEdit,\n create: NeighborhoodCreate,\n icon: HouseIcon\n};\n","import React from 'react';\nimport {\n Datagrid,\n List,\n Responsive,\n EditButton,\n SimpleList,\n TextField\n} from 'react-admin';\n\n\nexport const NeighborhoodList = (props) => (\n <List {...props} sort={{ field: 'name', order: 'asc' }} bulkActionButtons={false} pagination={null}>\n <Responsive\n small={\n <SimpleList linkType=\"show\" primaryText={record => record.name} />\n }\n medium={\n <Datagrid>\n <TextField sortable={false} source=\"name\" />\n <EditButton />\n </Datagrid>\n }\n />\n </List>\n)\n\n","import React from 'react';\nimport {\n Create,\n SimpleForm,\n TextInput,\n required\n} from 'react-admin';\n\nexport const NeighborhoodCreate = (props) => {\n return (\n <Create {...props}>\n <SimpleForm>\n <TextInput source=\"name\" validate={required()}/>\n </SimpleForm>\n </Create>\n );\n};\n","export const TWO_WAY_OPEN_API = 'twoWayOpenApi'\nconst ONE_WAY_SCRAPER = 'oneWayScraper'\nconst TWO_WAY_SCRAPER = 'twoWayScraper'\nconst NO_INTEGRATION_POSSIBLE = 'noIntegrationPossible'\nconst DISCOVERY_NEEDED = 'discoveryNeeded'\nconst PRODUCT_ONLY = 'productOnly'\n\nexport const BOOKING_SYSTEM_TYPES = [\n {id: TWO_WAY_OPEN_API, name: '2-Way Open API'},\n {id: ONE_WAY_SCRAPER, name: '1-Way Public API / Scraper'},\n {id: TWO_WAY_SCRAPER, name: '2-Way Public API / Scraper'},\n {id: NO_INTEGRATION_POSSIBLE, name: 'No Integration Possible'},\n {id: DISCOVERY_NEEDED, name: 'Discovery Needed'},\n {id: PRODUCT_ONLY, name: 'Product Only'},\n]\n\nconst buildLookup = (arrayOfObjects) => {\n let lookup = {}\n arrayOfObjects.forEach(object => lookup[object.id] = object.name) \n return lookup\n}\n\nexport const BOOKING_SYSTEM_TYPES_LOOKUP = buildLookup(BOOKING_SYSTEM_TYPES)\n","import React from 'react';\nimport {\n Datagrid,\n List,\n Responsive,\n ShowButton,\n SimpleList,\n TextField,\n BooleanField\n} from 'react-admin';\nimport { BOOKING_SYSTEM_TYPES_LOOKUP } from './enums'\n\nconst TypeField = ({ record, source }) => {\n const type = record[source]\n return (<span>{BOOKING_SYSTEM_TYPES_LOOKUP[type]}</span>);\n};\n\n\nexport const BookingSystemList = (props) => (\n <List {...props} sort={{ field: 'name', order: 'asc' }} bulkActionButtons={false} pagination={null}>\n <Responsive\n small={\n <SimpleList linkType=\"show\" primaryText={record => record.name} />\n }\n medium={\n <Datagrid>\n <TextField sortable={false} source=\"name\" />\n <BooleanField sortable={false} source=\"isLive\" label=\"Is Live on Skoop\"/>\n <TypeField sortable={false} source=\"type\" />\n <TextField sortable={false} source=\"leads\" />\n <ShowButton />\n </Datagrid>\n }\n />\n </List>\n)\n\n","import React from \"react\";\nimport { TextField as BaseTextField } from \"react-admin\";\n\nexport const TextFieldPreserveNewlines = (props) => {\n\n return <BaseTextField\n style={{whiteSpace: \"pre-wrap\"}}\n {...props}\n />\n}\nTextFieldPreserveNewlines.defaultProps = {\n addLabel: true,\n}\n","import React from 'react';\nimport {\n Show,\n SimpleShowLayout,\n TextField,\n Labeled,\n BooleanField,\n EditButton,\n TopToolbar\n} from 'react-admin';\nimport { BOOKING_SYSTEM_TYPES_LOOKUP, TWO_WAY_OPEN_API } from './enums'\nimport { TextFieldPreserveNewlines } from '../../components/TextFieldPreserveNewlines'\n\nconst TypeField = ({ record, source }) => {\n const type = record[source]\n return (<span>{BOOKING_SYSTEM_TYPES_LOOKUP[type]}</span>);\n};\nTypeField.defaultProps = { label: 'Type', addLabel: true };\n\nconst Actions = ({ basePath, data, resource }) => (\n <TopToolbar>\n <EditButton basePath={basePath} record={data} />\n </TopToolbar>\n);\n\nconst ApiDocumentationUrl = ({ record, source }) => {\n if (record.type === TWO_WAY_OPEN_API){\n return (\n <Labeled label=\"API Documentation URL\">\n <span>{record[source]}</span>\n </Labeled>\n );\n }\n return null\n};\n\nconst Title = ({record}) => <span>{record.name}</span>\n\nexport const BookingSystemShow = (props) => {\nreturn(\n <Show {...props} actions={<Actions />} title={<Title/>}>\n <SimpleShowLayout>\n <TextField source=\"name\" />\n <TextField source=\"leads\" />\n <BooleanField source=\"isLive\" label=\"Is Live On Skoop\"/>\n <TypeField source=\"type\" />\n <ApiDocumentationUrl source=\"apiDocumentationUrl\"/>\n <TextFieldPreserveNewlines multiline source=\"providerOnboardingInstructions\" />\n </SimpleShowLayout>\n </Show>\n)};\n","import React from 'react';\nimport {\n Create,\n SimpleForm,\n TextInput,\n SelectInput,\n BooleanInput\n} from 'react-admin';\n\nimport { BOOKING_SYSTEM_TYPES, TWO_WAY_OPEN_API } from './enums'\nimport { useFormState } from 'react-final-form';\n\nconst ApiDocumentationUrl = () => {\n const { values } = useFormState()\n if (values.type === TWO_WAY_OPEN_API){\n return <TextInput source=\"apiDocumentationUrl\" />\n }\n return null\n}\n\nexport const BookingSystemCreate = (props) => {\n return (\n <Create {...props}>\n <SimpleForm>\n <TextInput source=\"name\" />\n <BooleanInput source=\"isLive\" label=\"Is Live on Skoop\"/>\n <SelectInput source=\"type\" choices={BOOKING_SYSTEM_TYPES}/>\n <ApiDocumentationUrl/>\n <TextInput multiline source=\"providerOnboardingInstructions\" />\n </SimpleForm>\n </Create>\n );\n};\n","import React from 'react';\nimport {\n Edit,\n TextInput,\n BooleanInput,\n SelectInput,\n SimpleForm,\n Toolbar,\n SaveButton,\n} from 'react-admin';\nimport { BOOKING_SYSTEM_TYPES, TWO_WAY_OPEN_API } from './enums'\nimport { useFormState } from 'react-final-form';\n\nconst BottomToolbar = props => (\n <Toolbar {...props} >\n <SaveButton disabled={props.pristine} />\n </Toolbar>\n);\n\nconst Title = ({record}) => <span>{record.name}</span>\n\nconst ApiDocumentationUrl = () => {\n const { values } = useFormState()\n if (values.type === TWO_WAY_OPEN_API){\n return <TextInput source=\"apiDocumentationUrl\" />\n }\n return null\n}\n\nexport const BookingSystemEdit = props => (\n <Edit {...props} title={<Title/>}>\n <SimpleForm toolbar={<BottomToolbar/>}>\n <TextInput source=\"name\" />\n <BooleanInput source=\"isLive\" label=\"Is Live on Skoop\" />\n <SelectInput source=\"type\" choices={BOOKING_SYSTEM_TYPES}/>\n <ApiDocumentationUrl/>\n <TextInput style={{width: '100%'}} multiline source=\"providerOnboardingInstructions\" />\n </SimpleForm>\n </Edit>\n);\n","import {BookingSystemList} from './BookingSystemList';\nimport {BookingSystemShow} from './BookingSystemShow';\nimport {BookingSystemCreate} from './BookingSystemCreate';\nimport {BookingSystemEdit} from './BookingSystemEdit';\nimport EventAvailableIcon from '@mui/icons-material/EventAvailable';\n\nexport default {\n list: BookingSystemList,\n edit: BookingSystemEdit,\n show: BookingSystemShow,\n create: BookingSystemCreate,\n icon: EventAvailableIcon\n};\n","import { ReferralList } from './ReferralList';\nimport PersonAddIcon from '@mui/icons-material/PersonAdd';\n\nexport default {\n list: ReferralList,\n icon: PersonAddIcon\n};\n","import React from 'react';\nimport {\n Datagrid,\n List,\n DateField,\n TextField,\n FunctionField,\n ReferenceField\n} from 'react-admin';\nimport moment from 'moment'\n\nexport const ReferralList = (props) => {\n\n const _calculateServiceFee = (appointment) => {\n const { takePercentage, takeAmount } = appointment.service.provider\n const { subtotal } = appointment\n\n // TODO - recurring\n return subtotal * takePercentage + takeAmount\n }\n\n const ReferrerField = ({ referral }) => {\n const referrerText = referral.userReferrer?.email\n const code = referral.code\n return (\n <span>{referrerText || code}</span>\n );\n };\n\n const GrossRevenueField = ({ appointment }) => {\n if (!appointment._id){\n return <span></span>\n }\n return (\n <span>{_calculateServiceFee(appointment).toFixed(2)}</span>\n );\n };\n\n // const ReferredTotalGrossRevenueField = ({ referral }) => {\n // let totalGrossRevenue = 0\n // referral.appointmentsReferred.forEach(appointment => {\n // const grossRevenue = _calculateServiceFee(appointment)\n // totalGrossRevenue += grossRevenue\n // })\n // return (\n // <span>{totalGrossRevenue.toFixed(2)}</span>\n // );\n // };\n\n const PreviousReferrerAppointmentsField = ({ referral }) => {\n return (\n <span>{referral.previousAppointmentsReferrer.length}</span>\n );\n };\n\n const ReferredAppointmentsField = ({ referral }) => {\n return (\n <span>{referral.appointmentsReferred.length}</span>\n );\n };\n\n const AppointmentField = (props) => {\n const { record } = props;\n return record._id ? (\n <span>\n {moment(record.createdAt).format('M/D/YY')}: {record.service.name} at {record.service.provider.name}\n </span>\n ) : null;\n };\n\n return (\n <List {...props} sort={{ field: 'name', order: 'asc' }} bulkActionButtons={false} pagination={null}>\n <Datagrid>\n <DateField sortable={false} label=\"created\" source=\"createdAt\" />\n\n <FunctionField\n label=\"referrer\"\n render={ referral => ( <ReferrerField referral={referral}/> ) }\n />\n <TextField sortable={false} label=\"referred\" source=\"userReferred.email\" />\n <FunctionField\n label=\"previous referrer appointments\"\n render={ referral => ( <PreviousReferrerAppointmentsField referral={referral}/> ) }\n />\n <ReferenceField sortable={false} label=\"referrer appointment\" source=\"appointmentReferrer._id\" reference=\"appointments\">\n <AppointmentField/>\n </ReferenceField>\n <TextField sortable={false} label=\"referrer appointment cost\" source=\"appointmentReferrer.subtotal\" />\n <FunctionField\n label=\"referrer appointment gross revenue\"\n render={ referral => ( <GrossRevenueField appointment={referral.appointmentReferrer}/> ) }\n />\n <FunctionField\n label=\"referred appointments\"\n render={ referral => ( <ReferredAppointmentsField referral={referral}/> ) }\n />\n <ReferenceField sortable={false} label=\"referred appointment\" source=\"appointmentReferred._id\" reference=\"appointments\">\n <AppointmentField/>\n </ReferenceField>\n <TextField sortable={false} label=\"referred appointment cost\" source=\"appointmentReferred.subtotal\" />\n <FunctionField\n label=\"referred appointment gross revenue\"\n render={ referral => ( <GrossRevenueField appointment={referral.appointmentReferred}/> ) }\n />\n {/* <FunctionField\n label=\"referred total gross revenue\"\n render={ referral => ( <ReferredTotalGrossRevenueField referral={referral}/> ) }\n /> */}\n </Datagrid>\n </List>\n )\n}\n","import React, { useState, useEffect } from 'react';\nimport {\n Show,\n SimpleShowLayout,\n TextField,\n SelectField,\n NumberField,\n ArrayField,\n SingleFieldList,\n ChipField,\n BooleanField,\n EditButton,\n TopToolbar,\n ListButton\n} from 'react-admin';\nimport { ChevronLeft } from '@material-ui/icons'\nimport { makeRequest } from '../../helpers'\n\nconst Actions = ({ basePath, data, resource }) => (\n <TopToolbar>\n <ListButton basePath={basePath} label=\"Back\" icon={<ChevronLeft />} />\n <EditButton basePath={basePath} record={data} />\n </TopToolbar>\n);\n\nconst Title = ({record}) => <span>{record.title}</span>\n\nexport default (props) => {\n const [categories, setCategories] = useState([])\n const [subcategories, setSubcategories] = useState([])\n\n useEffect(() => {\n getCategories()\n getSubcategories()\n }, []);\n\n const getCategories = async () => {\n const categoriesResponse = await makeRequest('/categories', {isSearchable: true})\n setCategories(categoriesResponse)\n }\n\n const getSubcategories = async () => {\n const subcategoriesResponse = await makeRequest('/subcategories', {isCurrent: true})\n setSubcategories(subcategoriesResponse)\n }\n\n return (\n <Show {...props} actions={<Actions />} title={<Title/>}>\n <SimpleShowLayout>\n <TextField source=\"title\" />\n <BooleanField source=\"active\" label=\"Active\"/>\n <SelectField source=\"category\" optionValue='_id' choices={categories} />\n <SelectField source=\"subcategory\" optionValue='_id' choices={subcategories} />\n <BooleanField source=\"inHomeFilter\" label=\"In-Home Only\"/>\n <BooleanField source=\"hasDiscountFilter\" label=\"Skoop Exclusive\"/>\n <NumberField source=\"sortOrder\" label=\"Sort Order\"/>\n <ArrayField source=\"serviceIds\" label=\"Services\">\n <SingleFieldList linkType={false}>\n <ChipField source=\"providerAndServiceName\" />\n </SingleFieldList>\n </ArrayField>\n </SimpleShowLayout>\n </Show>\n )\n};\n","import React, { useState, useEffect } from 'react';\nimport {\n Edit,\n TextInput,\n BooleanInput,\n NumberInput,\n SelectInput,\n AutocompleteInput,\n Button,\n required,\n SimpleForm,\n Toolbar,\n SaveButton,\n} from 'react-admin';\nimport { AutocompleteObjectArrayInput } from '../../components/AutocompleteObjectArrayInput'\nimport { prepend, SubcategoryInput } from '../../components/SubcategoryInput'\n\nimport { useFormState, useForm } from 'react-final-form';\nimport { makeRequest } from '../../helpers'\n\nconst BottomToolbar = props => (\n <Toolbar {...props} >\n <SaveButton disabled={props.pristine} />\n </Toolbar>\n);\n\nconst Title = ({record}) => <span>{record.title}</span>\n\nexport default props => {\n const [providers, setProviders] = useState([])\n const [providerServices, setProviderServices] = useState([])\n const [categories, setCategories] = useState([])\n const [subcategories, setSubcategories] = useState([])\n\n useEffect(() => {\n getProviders();\n getCategories()\n getSubcategories()\n }, []);\n\n const getCategories = async () => {\n const categoriesResponse = await makeRequest('/categories', {isSearchable: true})\n setCategories(categoriesResponse)\n }\n\n const getSubcategories = async () => {\n const subcategoriesResponse = await makeRequest('/subcategories', {isCurrent: true})\n setSubcategories(subcategoriesResponse)\n }\n\n const getProviders = async () => {\n const providersResponse = await makeRequest('/providers');\n setProviders(providersResponse);\n };\n\n const getProviderServices = async (selectedProviderId) => {\n const servicesResponse = await makeRequest(`/services?provider=${selectedProviderId}`);\n setProviderServices(servicesResponse);\n };\n\n const handleProviderSelect = (selectedProviderId) => {\n if (selectedProviderId){\n getProviderServices(selectedProviderId)\n }\n }\n\n const AddServiceToCuratedListButton = () => {\n const { values } = useFormState();\n const { change, batch } = useForm();\n\n const addServiceToCuratedList = () => {\n const addedService = providerServices.find( service => service._id === values.selectedService)\n const updatedServiceIds = (values.serviceIds || []).concat(addedService)\n batch(() => {\n change('selectedProvider', undefined)\n change('selectedService', undefined)\n change('serviceIds', updatedServiceIds)\n })\n }\n\n return (\n <Button disabled={!values.selectedService} label=\"+ Add Service\" onClick={addServiceToCuratedList}/>\n );\n };\n\n const Services = () => {\n const { values } = useFormState()\n\n return (\n <AutocompleteObjectArrayInput source=\"serviceIds\" label=\"Services\" choices={values.serviceIds} optionText=\"providerAndServiceName\" optionValue=\"_id\" />\n )\n }\n\n return (\n <Edit {...props} title={<Title/>}>\n <SimpleForm toolbar={<BottomToolbar/>}>\n <TextInput source=\"title\" validate={required()}/>\n <BooleanInput source=\"active\" label=\"Active\"/>\n <AutocompleteInput disabled={categories.length === 0} source=\"category\" choices={prepend({_id: null, name: ''}, categories)} optionValue=\"_id\" emptyValue={null} emptyText=''/>\n <SubcategoryInput subcategories={subcategories}/>\n <BooleanInput source=\"inHomeFilter\" label=\"In-Home Only\"/>\n <BooleanInput source=\"hasDiscountFilter\" label=\"Skoop Exclusive\"/>\n <NumberInput source=\"sortOrder\" label=\"Sort Order\"/>\n <SelectInput source=\"selectedProvider\" label=\"Choose a provider\" choices={providers} optionText={(record) => `${record.name} (${record.neighborhood})`} optionValue=\"_id\" onChange={e => handleProviderSelect(e.target.value)}/>\n <SelectInput source=\"selectedService\" label=\"Choose a service\" choices={providerServices} optionValue=\"_id\"/>\n <AddServiceToCuratedListButton/>\n <Services/>\n </SimpleForm>\n </Edit>\n );\n}\n","import List from './List';\nimport Show from './Show';\nimport Create from './Create';\nimport Edit from './Edit';\nimport AppShortcutIcon from '@mui/icons-material/AppShortcut';\n\nexport default {\n list: List,\n edit: Edit,\n show: Show,\n create: Create,\n icon: AppShortcutIcon\n};\n","import React from 'react';\nimport {\n Datagrid,\n List,\n Responsive,\n ShowButton,\n SimpleList,\n TextField,\n BooleanField,\n NumberField\n} from 'react-admin';\n\nexport default (props) => (\n <List {...props} sort={{ field: 'sortOrder', order: 'asc' }} bulkActionButtons={false} pagination={null}>\n <Responsive\n small={\n <SimpleList linkType=\"show\" primaryText={record => record.title} />\n }\n medium={\n <Datagrid>\n <TextField sortable={false} source=\"title\"/>\n <BooleanField sortable={false} source=\"active\" label=\"Active\"/>\n <NumberField sortable={false} source=\"sortOrder\" label=\"Sort Order\"/>\n <NumberField sortable={false} source=\"serviceIds.length\" label=\"# of Services\"/>\n <ShowButton />\n </Datagrid>\n }\n />\n </List>\n)\n","import React, { useState, useEffect } from 'react';\nimport {\n Create,\n SimpleForm,\n TextInput,\n SelectInput,\n NumberInput,\n BooleanInput,\n AutocompleteInput,\n AutocompleteArrayInput,\n Button,\n required\n} from 'react-admin';\nimport { makeRequest } from '../../helpers'\nimport { useFormState, useForm } from 'react-final-form';\nimport { prepend, SubcategoryInput } from '../../components/SubcategoryInput'\n\nexport default (props) => {\n const [providers, setProviders] = useState([])\n const [providerServices, setProviderServices] = useState([])\n const [listServices, setListServices] = useState([])\n const [categories, setCategories] = useState([])\n const [subcategories, setSubcategories] = useState([])\n\n useEffect(() => {\n getProviders();\n getCategories()\n getSubcategories()\n }, []);\n\n const getCategories = async () => {\n const categoriesResponse = await makeRequest('/categories', {isSearchable: true})\n setCategories(categoriesResponse)\n }\n\n const getSubcategories = async () => {\n const subcategoriesResponse = await makeRequest('/subcategories', {isCurrent: true})\n setSubcategories(subcategoriesResponse)\n }\n\n const getProviders = async () => {\n const providersResponse = await makeRequest('/providers');\n setProviders(providersResponse);\n };\n\n const getProviderServices = async (selectedProviderId) => {\n const servicesResponse = await makeRequest(`/services?provider=${selectedProviderId}`);\n setProviderServices(servicesResponse);\n };\n\n const getListServices = async (serviceIds) => {\n const servicesResponse = await makeRequest(`/services?serviceIds=${serviceIds}`);\n setListServices(servicesResponse);\n };\n\n const handleProviderSelect = (selectedProviderId) => {\n if (selectedProviderId){\n getProviderServices(selectedProviderId)\n }\n }\n\n const AddServiceToCuratedListButton = () => {\n const { values } = useFormState();\n const { change, batch } = useForm();\n\n const addServiceToCuratedList = () => {\n const updatedServiceIds = (values.serviceIds || []).concat(values.selectedService)\n batch(() => {\n change('selectedProvider', undefined)\n change('selectedService', undefined)\n change('serviceIds', updatedServiceIds)\n })\n getListServices(updatedServiceIds)\n }\n\n return (\n <Button disabled={!values.selectedService} label=\"+ Add Service\" onClick={addServiceToCuratedList}/>\n );\n };\n\n return (\n <>\n <Create {...props}>\n <SimpleForm>\n <TextInput source=\"title\" validate={required()}/>\n <BooleanInput source=\"active\" label=\"Active\"/>\n <AutocompleteInput disabled={categories.length === 0} source=\"category\" choices={prepend({_id: null, name: ''}, categories)} optionValue=\"_id\" emptyValue={null} emptyText=''/>\n <SubcategoryInput subcategories={subcategories}/>\n <BooleanInput source=\"inHomeFilter\" label=\"In-Home Only\"/>\n <BooleanInput source=\"hasDiscountFilter\" label=\"Skoop Exclusive\"/>\n <NumberInput source=\"sortOrder\" label=\"Sort Order\"/>\n <SelectInput source=\"selectedProvider\" label=\"Choose a provider\" choices={providers} optionValue=\"_id\" optionText={(record) => `${record.name} (${record.neighborhood})`} onChange={e => handleProviderSelect(e.target.value)}/>\n <SelectInput source=\"selectedService\" label=\"Choose a service\" choices={providerServices} optionValue=\"_id\"/>\n <AddServiceToCuratedListButton/>\n <AutocompleteArrayInput source=\"serviceIds\" label=\"Services\" choices={listServices} optionValue=\"_id\" optionText=\"providerAndServiceName\" />\n </SimpleForm>\n </Create>\n </>\n );\n};\n","import React from 'react';\nimport {\n List,\n Datagrid,\n TextField,\n FunctionField,\n} from 'react-admin';\nimport { parseBookingSystem } from './util/parseBookingSystem'\n\n\nconst BookingSystemField = ({ provider }) => {\n return (\n <span>{parseBookingSystem(provider)}</span>\n );\n};\n\nexport default (props) => (\n <List pagination={null} bulkActionButtons={false} {...props}>\n <Datagrid isRowSelectable={() => false} rowClick=\"edit\">\n <TextField sortable={false} source=\"id\" />\n <TextField sortable={false} source=\"name\" />\n <TextField sortable={false} source=\"neighborhood\" />\n <FunctionField\n label=\"Booking System\"\n render={ provider => ( <BookingSystemField provider={provider}/> ) }\n />\n <TextField sortable={false} source=\"address\" />\n </Datagrid>\n </List>\n);\n","import {\n required,\n regex,\n maxValue,\n minValue,\n} from 'react-admin';\nimport get from 'lodash.get'\n\nexport const requiredRange = (min, max) => {\n return [\n required(),\n maxValue(max, `No more than ${max}`),\n minValue(min, `No less than ${min}`),\n ];\n};\n\nexport const validateWebsite = (message = 'Website must begin with https:// or http:// and no trailing slash') =>\n value => \n !value || \n (\n (value.slice(0,8) === 'https://' || value.slice(0,7) === 'http://')\n &&\n value.slice(-1) !== '/'\n )\n ? undefined : message;\n\nexport const validateInstagram = (message = 'Instagram must begin with https://www.instagram.com/ and no trailing URL params or slashes') =>\n value => {\n return (\n !value \n || \n (\n value.slice(0,26) === 'https://www.instagram.com/'\n &&\n value.length > 26\n &&\n ( \n value.slice(26).indexOf('/') === -1\n ||\n value.length < value.slice(26).indexOf('/') + 26\n )\n )\n ? undefined : message\n )\n }\n\nexport const validateTime = regex(/^[0-2][0-9]:[0-5][0-9]$/, 'Make sure time is in format 00:00 (with leading zero) e.g. 9:00am is 09:00')\nexport const validatePMTime = (message='Closing time must be after 12:00') => (value) => {\n return !value || value > '11:59' ? undefined : message\n}\nexport const validateOpenAndClose = () => (value, allValues, props) => {\n const field = props.name\n const relatedField = field.includes('end') ? field.replace('end', 'start') : field.replace('start', 'end')\n const relatedFieldValue = get(allValues, relatedField)\n\n if (value && !relatedFieldValue || !value && relatedFieldValue){\n return 'Fill out both open and close for a given day, or leave them both blank'\n }\n const start = field.includes('start') ? value : relatedFieldValue\n const end = field.includes('end') ? value : relatedFieldValue\n if (end <= start){\n return 'Open must be before close'\n }\n\n return undefined\n}\n","import React, { useState } from 'react';\nimport {\n SimpleForm,\n TextInput,\n NumberInput,\n SelectInput,\n Toolbar,\n required,\n Button\n} from 'react-admin';\nimport { requiredRange } from '../util/validations'\nimport { parseBookingSystem } from '../util/parseBookingSystem'\nimport { makeRequest, fetchPost } from '../../../helpers'\nimport { useFormState } from 'react-final-form';\nimport get from 'lodash.get'\n\nconst getQueryParams = ({provider, bookingSystem}) => {\n const queryParamsForBookingSystem = {\n boulevard: { businessId: provider.integrationDetails.boulevard?.businessId },\n mindbody: { siteId: provider.integrationDetails.mindbody?.siteId },\n square: { credentialSetId: provider.squareCredentialSet },\n zenoti: { apiKey: provider.integrationDetails.zenoti?.apiKey },\n }\n return queryParamsForBookingSystem[bookingSystem]\n}\n\nconst optionTextAndValue = (bookingSystem) => {\n if (bookingSystem === 'mindbody'){\n return { optionText: 'Name', optionValue: 'Id'}\n }\n}\n\nexport const AddLocation = (props) => {\n const { record, exitAddLocationMode } = props\n const provider = record\n const bookingSystem = parseBookingSystem(provider)\n const [locations, setLocations] = useState([])\n const [isLoading, setIsLoading] = useState(false)\n\n const getLocations = async (provider) => {\n const endpoint = `/${bookingSystem}/locations`\n const queryParams = getQueryParams({provider, bookingSystem})\n\n try {\n const locationsResponse = await makeRequest(endpoint, queryParams);\n setLocations(locationsResponse)\n } catch (err){\n alert(err)\n return\n }\n };\n\n const LocationButton = () => <Button label=\"Get Locations\" onClick={() => getLocations(provider)} />\n\n const checkReadyToConvert = (values) => {\n const requiredFields = ['neighborhood', 'address', 'latitude', 'longitude', 'locationId']\n\n for (const field of requiredFields){\n if ( !get(values, field) ){\n return { isReadyToConvert: false, missingField: field}\n }\n }\n\n return { isReadyToConvert: true }\n }\n\n \n const addLocation = async (values) => {\n const { isReadyToConvert, missingField } = checkReadyToConvert(values)\n if (!isReadyToConvert){\n alert(`Make sure to fill out all the fields. Missing: ${missingField}`)\n return\n }\n\n try {\n setIsLoading(true)\n await fetchPost('/add_location', {...values, providerId: provider._id})\n exitAddLocationMode()\n alert('success')\n setIsLoading(false)\n } catch(err){\n alert(err)\n setIsLoading(false)\n return\n }\n }\n\n const CustomSaveButton = () => {\n const { values } = useFormState();\n\n return (\n <Button\n style={{\n backgroundColor: 'blue',\n color: 'white',\n height: 36,\n marginLeft: 20,\n padding: 15,\n }}\n disabled={isLoading}\n label=\"Add Location\"\n onClick={() => addLocation(values)}\n />\n )\n }\n\n return (\n <SimpleForm\n toolbar={\n <Toolbar {...props}>\n <CustomSaveButton/>\n </Toolbar>\n }\n >\n <TextInput source=\"neighborhood\" validate={required()} />\n <TextInput source=\"address\" validate={required()} className=\"w_50\" />\n <NumberInput source=\"latitude\" validate={requiredRange(0, 180)} />\n <NumberInput source=\"longitude\" validate={requiredRange(-180, 0)} />\n <LocationButton />\n {\n locations.length ? \n <SelectInput validate={required()} source=\"locationId\" choices={locations} {...optionTextAndValue(bookingSystem)}/>\n : null\n }\n </SimpleForm>\n );\n};\n","import React from 'react';\nimport { Link } from 'react-router-dom';\n\nexport default ({record}) => (\n <Link\n to={{\n pathname: '/services',\n search: `filter=${JSON.stringify({ provider: record.id })}`,\n }}\n >\n {record.name} services\n </Link>\n);\n","import React, { useEffect, useState } from 'react'\nimport { ImageField, ImageInput, required } from 'react-admin';\nimport { useFormState, useForm } from 'react-final-form';\nimport { CircularProgress } from '@mui/material';\n\nimport { fetchPost } from '../../../../helpers'\nimport { optionallyReplaceBlobWithS3Url } from './optionallyReplaceBlobWithS3Url'\n\n\nexport default (props) => {\n const { saveDisabled, setSaveDisabled, record } = props\n const providerId = record._id\n\n // HAX - after upgrading to latest react admin (react-final-form -> react-hook-form),\n // we should be able to use a hook to do this directly, without re-rendering\n const { change } = useForm();\n const { values } = useFormState()\n const [s3Url, setS3Url] = useState(undefined)\n\n useEffect(() => {\n optionallyReplaceBlobWithS3Url({values, s3Url, replaceBlobWithS3Url})\n }, [s3Url])\n\n const replaceBlobWithS3Url = ({fieldToOverwrite, newValue}) => {\n change(fieldToOverwrite, newValue)\n setSaveDisabled(false)\n setS3Url(undefined)\n }\n\n const getBase64AndSaveToS3 = ({uploadedFile, fileNamePrefix=''}) => {\n setSaveDisabled(true)\n const reader = new FileReader();\n reader.readAsDataURL(uploadedFile);\n reader.onload = async () => {\n const base64String = reader.result.replace(/^data:image\\/\\w+;base64,/, \"\")\n const s3UrlResponse = await fetchPost(`/s3_photos`, {\n base64: base64String,\n fileName: fileNamePrefix + new Date().getTime().toString(),\n folder: `providers/${providerId}`\n })\n setS3Url(s3UrlResponse)\n };\n reader.onerror = (error) => {\n alert(`There was an error uploading that photo to Skoop's image repository. Please reach out for help.`)\n };\n }\n\n const onChangeThumbnail = (uploadedFile) => {\n if (!!uploadedFile){\n getBase64AndSaveToS3({uploadedFile, fileNamePrefix: 'thumbnail'})\n }\n }\n\n const onChangeMediaUrls = (mediaUrls) => {\n const uploadedFile = mediaUrls.find( m => !!m.size ) // find a better way to identify the recently uploaded file\n if (!!uploadedFile){\n getBase64AndSaveToS3({uploadedFile})\n }\n }\n\n return (\n <>\n <ImageInput source=\"thumbnailWithSrc\" label=\"Thumbnail\" accept=\"image/*\" validate={required()} onChange={onChangeThumbnail}>\n <ImageField source=\"src\"/>\n </ImageInput>\n {/* TODO - is there a way to disable ImageInput?? disable prop is not working */}\n {saveDisabled ? <>\n <CircularProgress/>\n <span>Image uploading. Please wait to upload or remove additional images.</span>\n </> : null}\n <ImageInput multiple source=\"mediaUrlsWithSrc\" label=\"Other photos\" accept=\"image/*\" onChange={onChangeMediaUrls}>\n <ImageField source=\"src\"/>\n </ImageInput>\n </>\n )\n}\n","const _getNewFieldValue = ({fieldToOverwrite, mediaUrls, s3Url}) => {\n const updatedImageObject = { src: s3Url, rawFile: {} } // rawFile property kept for <ImageField> internal delete method to work properly \n if (fieldToOverwrite === 'mediaUrlsWithSrc'){\n const existingMediaUrls = mediaUrls.slice(0, mediaUrls.length - 1)\n return existingMediaUrls.concat(updatedImageObject)\n } else if (fieldToOverwrite === 'thumbnailWithSrc'){\n return updatedImageObject\n }\n}\n\nexport const optionallyReplaceBlobWithS3Url = ({values, s3Url, replaceBlobWithS3Url}) => {\n const { mediaUrlsWithSrc: mediaUrls, thumbnailWithSrc: thumbnail } = values\n const hasFileBeenUploaded = !!s3Url\n if (!hasFileBeenUploaded){\n return\n }\n\n const areMediaUrlsUpdated = !!mediaUrls.find( m => m.src.includes('blob') )\n const isThumbnailUpdated = thumbnail?.src.includes('blob')\n\n if (!areMediaUrlsUpdated && !isThumbnailUpdated){\n // unable to disable ImageInput so this alert is hacky solution\n alert('Unexpected state. Do not delete or upload files until the previous file has been uploaded. Refresh your browser to avoid saving corrupted data.')\n return\n }\n\n const fieldToOverwrite = areMediaUrlsUpdated ? 'mediaUrlsWithSrc' : 'thumbnailWithSrc'\n const newValue = _getNewFieldValue({fieldToOverwrite, mediaUrls, s3Url})\n\n replaceBlobWithS3Url({fieldToOverwrite, newValue})\n}\n","import React, { useEffect, useState } from 'react';\n\nimport Chip from '@material-ui/core/Chip';\n\nimport { makeRequest } from '../../../helpers';\n\nexport default ({record}) => {\n // const [categories, setCategories] = useState([]);\n // const [subcategories, setSubcategories] = useState([]);\n\n // useEffect(() => {\n // getCategories();\n // getSubcategories();\n // }, []);\n\n // const getCategories = async () => {\n // const categoriesResponse = await makeRequest('/categories');\n // setCategories(categoriesResponse);\n // };\n\n // const getSubcategories = async () => {\n // const subcategoriesResponse = await makeRequest('/subcategories');\n // setSubcategories(subcategoriesResponse);\n // };\n\n return (\n <>\n <b>Categories</b>\n {\n record.categories.map((category) => {\n return (\n <Chip\n key={category._id}\n label={category.name}\n />\n );\n })\n }\n <br></br>\n {record.subcategories.length > 0 &&\n <div>\n <b>Subcategories</b>\n {\n record.subcategories.map((subcategory) => {\n return (\n <Chip\n key={subcategory._id}\n label={subcategory.name}\n />\n );\n })\n }\n </div>\n }\n </>\n )\n}\n","import React, { useState } from 'react';\nimport { TextInput, Button } from 'react-admin';\nimport { useFormState, useForm } from 'react-final-form';\nimport ReactJson from 'react-json-view'\n\nimport { makeRequest } from '../../../../../helpers'\nimport { REACT_JSON_DEFAULT_PROPS } from './index'\n\nconst FindGoogleBusinessButton = ({setGooglePlace}) => {\n const { values } = useFormState();\n const { change } = useForm();\n\n const findGoogleBusiness = async () => {\n try {\n const googlePlace = await makeRequest('/providers/google_place/search', { searchTerm: values.googleNameToSearch })\n change('googlePlaceId', googlePlace.place_id)\n setGooglePlace(googlePlace)\n } catch (err){\n alert('Internal Server Error trying to find Google Place Id')\n }\n }\n\n return (\n <Button disabled={!values.googleNameToSearch} label=\"Find Google Place ID\" onClick={findGoogleBusiness}/>\n );\n};\n\nconst SearchSection = ({savedGooglePlaceId, setGooglePlace, ...rest}) => {\n const [showSearchSection, setShowSearchSection] = useState(!savedGooglePlaceId)\n\n if (!showSearchSection){\n return <Button label=\"Update Google Place ID\" onClick={() => setShowSearchSection(true)} style={{display: 'flex'}}/>\n }\n return (\n <div {...rest}>\n <TextInput source=\"googleNameToSearch\" helperText=\"The provider's business name as listed on Google\"/>\n <FindGoogleBusinessButton setGooglePlace={setGooglePlace}/>\n </div>\n )\n}\n\nexport default (props) => {\n const savedGooglePlaceId = props.record.googlePlaceId\n const [googlePlace, setGooglePlace] = useState(undefined)\n\n const getGooglePlaceDetails = async () => {\n const googlePlaceResponse = await makeRequest(`/providers/${props.record.id}/google_place`)\n setGooglePlace(googlePlaceResponse)\n }\n\n const GooglePlaceDetailsButton = () => {\n const { values } = useFormState();\n const showButton = !!savedGooglePlaceId && !googlePlace && !values.googleNameToSearch\n return showButton ? <Button label=\"Get Google Place Details\" onClick={getGooglePlaceDetails} style={{display: 'flex'}}/> : null\n }\n\n return (\n <div {...props}>\n <span style={{'font-weight': 'bold'}}>Google</span>\n <SearchSection {...props} savedGooglePlaceId={savedGooglePlaceId} setGooglePlace={setGooglePlace}/>\n <TextInput disabled label=\"Google Place ID\" source=\"googlePlaceId\" helperText={googlePlace ? googlePlace.name : undefined} {...props}/>\n <GooglePlaceDetailsButton />\n {googlePlace ? <ReactJson src={googlePlace} name={`Google Place Details`} {...REACT_JSON_DEFAULT_PROPS}/> : null}\n </div>\n );\n};\n","import React, { useState } from 'react';\nimport { TextInput, Button } from 'react-admin';\nimport { useFormState, useForm } from 'react-final-form';\nimport ReactJson from 'react-json-view'\n\nimport { makeRequest } from '../../../../../helpers'\nimport { REACT_JSON_DEFAULT_PROPS } from './index'\n\nconst ValidateYelpButton = ({setYelpBusiness}) => {\n const { values } = useFormState();\n const { change } = useForm();\n\n const validateYelpIdentifer = async () => {\n const yelpBusiness = await makeRequest(`/providers/yelp_business/${values.yelpAlias}`)\n if (!yelpBusiness){\n return alert(`No Yelp businesses found with alias ${values.yelpAlias}`)\n }\n change('yelpBusinessId', yelpBusiness.id)\n setYelpBusiness(yelpBusiness)\n }\n\n return (\n <Button disabled={!values.yelpAlias} label=\"Validate Yelp alias\" onClick={validateYelpIdentifer}/>\n );\n};\n\nconst SearchSection = ({savedYelpBusinessId, setYelpBusiness, ...rest}) => {\n const [showSearchSection, setShowSearchSection] = useState(!savedYelpBusinessId)\n\n if (!showSearchSection){\n return <Button label=\"Update Yelp Business ID\" onClick={() => setShowSearchSection(true)} style={{display: 'flex'}}/>\n }\n return (\n <div {...rest}>\n <TextInput source=\"yelpAlias\" helperText=\"https://www.yelp.com/biz/<ALIAS>\"/>\n <ValidateYelpButton setYelpBusiness={setYelpBusiness}/>\n </div>\n )\n}\n\nexport default (props) => {\n const savedYelpBusinessId = props.record.yelpBusinessId\n const [yelpBusiness, setYelpBusiness] = useState(undefined)\n\n const getYelpBusinessDetails = async () => {\n const yelpBusinessResponse = await makeRequest(`/providers/${props.record.id}/yelp_business`)\n setYelpBusiness(yelpBusinessResponse)\n }\n\n const YelpBusinessDetailsButton = () => {\n const { values } = useFormState();\n const showButton = !!savedYelpBusinessId && !yelpBusiness && !values.yelpAlias\n return showButton ? <Button label=\"Get Yelp Business Details\" onClick={getYelpBusinessDetails} style={{display: 'flex'}}/> : null\n }\n\n return (\n <div {...props}>\n <span style={{'font-weight': 'bold'}}>Yelp</span>\n <SearchSection {...props} savedYelpBusinessId={savedYelpBusinessId} setYelpBusiness={setYelpBusiness}/>\n <TextInput disabled label=\"Yelp Business ID\" source=\"yelpBusinessId\" helperText={yelpBusiness ? yelpBusiness.name : undefined} {...props}/>\n <YelpBusinessDetailsButton/>\n {yelpBusiness && <ReactJson src={yelpBusiness} name={`Yelp Business Details`} {...REACT_JSON_DEFAULT_PROPS}/>}\n </div>\n );\n};\n","import React from 'react';\nimport { FormTab } from 'react-admin';\nimport GoogleSection from './GoogleSection'\nimport YelpSection from './YelpSection'\n\nexport const REACT_JSON_DEFAULT_PROPS = { style: {marginBottom: 20}, displayDataTypes: false, displayObjectSize: false, displayArrayKey: false, collapsed: true }\n\n// https://github.com/marmelab/react-admin/issues/3762#issuecomment-537467252 make sure to propagate props!\nexport default (props) => {\n return (\n <FormTab label=\"Google And Yelp\" {...props}>\n <YelpSection className=\"w_50\" style={{'margin-top': 20}}/>\n <GoogleSection className=\"w_50\" style={{'margin-top': 20}}/>\n </FormTab>\n );\n};\n","import React, { useEffect, useState } from 'react';\nimport { FormTab, TextInput, Button } from 'react-admin';\nimport { useFormState, useForm } from 'react-final-form';\nimport { CircularProgress } from '@mui/material';\n\nimport { fetchPost, makeRequest } from '../../../../../helpers';\n\nconst SaveAmbassadorCode = ({setExistingAmbassadorCode, ...props}) => {\n const providerId = props.record?._id\n const { values } = useFormState();\n const { change } = useForm();\n\n const saveAmbassadorCode = async () => {\n await fetchPost(`/provider_ambassador_codes`, { code: values.ambassadorCode, provider: providerId})\n alert('success')\n change('ambassadorCode', '')\n setExistingAmbassadorCode(values.ambassadorCode)\n }\n\n return (\n <Button disabled={!values.ambassadorCode} label=\"Save\" onClick={saveAmbassadorCode}/>\n );\n};\n\nconst RenderTab = ({isLoading, existingAmbassadorCode, setExistingAmbassadorCode, ...props}) => {\n if (isLoading){\n return <CircularProgress/>\n }\n\n if (existingAmbassadorCode){\n return <span>{existingAmbassadorCode}</span>\n }\n\n return (\n <>\n <TextInput label=\"Ambassador Code\" source=\"ambassadorCode\" helperText=\"Make sure to capitalize\" {...props}/>\n <SaveAmbassadorCode setExistingAmbassadorCode={setExistingAmbassadorCode} {...props}/>\n </>\n )\n}\n\nexport default (props) => {\n const providerId = props.record?._id\n const [existingAmbassadorCode, setExistingAmbassadorCode] = useState(undefined)\n const [isLoading, setIsLoading] = useState(true)\n\n useEffect(()=> {\n if (providerId){\n getAmbassadorCode()\n }\n }, [providerId])\n\n const getAmbassadorCode = async () => {\n const existingCode = await makeRequest('/provider_ambassador_codes', { provider: providerId })\n if (existingCode){\n setExistingAmbassadorCode(existingCode.code)\n }\n setIsLoading(false)\n }\n\n return (\n <FormTab label=\"Ambassador Code\" {...props}>\n <RenderTab existingAmbassadorCode={existingAmbassadorCode} setExistingAmbassadorCode={setExistingAmbassadorCode} isLoading={isLoading} {...props}/>\n </FormTab>\n );\n};\n","import React from 'react';\nimport { Link } from 'react-router-dom';\n\nexport default ({record}) => {\n if (!record.providerSchedule){\n return null\n }\n return (\n <Link to={{ pathname: `/provider_schedules/${record.providerSchedule._id}` }}>\n Provider Schedule\n </Link>\n )\n}\n","import React, { useState } from 'react';\nimport {\n Edit,\n TabbedForm,\n FormTab,\n Toolbar,\n TextInput,\n NumberInput,\n BooleanInput,\n ReferenceInput,\n ReferenceField,\n TextField,\n SaveButton,\n required,\n email,\n} from 'react-admin';\nimport { useFormState } from 'react-final-form';\n\nimport { requiredRange, validateWebsite, validateInstagram } from './util/validations';\nimport LinkToServices from './components/LinkToServices';\nimport ImageEditor from './components/ImageEditor/index'\nimport CategoriesAndSubcategories from './components/CategoriesAndSubcategories';\nimport GoogleAndYelpTab from './components/Tabs/GoogleAndYelp';\nimport AmbassadorCodeTab from './components/Tabs/AmbassadorCode';\nimport LinkToProviderSchedule from './components/LinkToProviderSchedule';\n\nconst CustomSaveButton = ({saveDisabled, ...props}) => {\n const formState = useFormState()\n return <SaveButton disabled={saveDisabled || !!formState.values.ambassadorCode} {...props}/>\n}\n\nexport const EditBase = (props) => {\n const [saveDisabled, setSaveDisabled] = useState(false)\n\n return (\n <Edit {...props} className=\"providerEdit\">\n <TabbedForm\n toolbar={\n <Toolbar {...props}>\n <CustomSaveButton saveDisabled={saveDisabled}/>\n <props.AddLocationButton />\n </Toolbar>\n }\n >\n <FormTab label=\"Details\">\n <LinkToServices />\n <TextInput disabled source=\"id\" />\n <TextInput source=\"name\" className=\"w_50\" />\n <BooleanInput label=\"In-home only\" source=\"inHomeOnly\" />\n <TextInput source=\"neighborhood\" validate={required()} />\n <TextInput source=\"address\" validate={required()} className=\"w_50\" />\n <TextInput source=\"priceRange\" validate={required()} />\n <NumberInput source=\"latitude\" validate={requiredRange(0, 180)} />\n <NumberInput source=\"longitude\" validate={requiredRange(-180, 0)} />\n <TextInput source=\"description\" multiline className=\"w_50\" />\n <TextInput source=\"website\" validate={validateWebsite()}/>\n <TextInput source=\"instagram\" validate={validateInstagram()}/>\n <TextInput source=\"email\" validate={email()}/>\n <NumberInput source=\"cancellationWindow\" validate={requiredRange(0, undefined)}/>\n <NumberInput source=\"cancellationAmount\" validate={requiredRange(0, undefined)}/>\n <NumberInput source=\"cancellationPercentage\" validate={requiredRange(0, 1)}/>\n <NumberInput source=\"takeAmount\" validate={requiredRange(0, undefined)}/>\n <NumberInput source=\"takePercentage\" validate={requiredRange(0, 1)} />\n <TextInput source=\"stripeConnectAccountId\" validate={required()} />\n <CategoriesAndSubcategories />\n <ImageEditor saveDisabled={saveDisabled} setSaveDisabled={setSaveDisabled}/>\n <BooleanInput label=\"Archived?\" source=\"archived\" />\n <LinkToProviderSchedule />\n </FormTab>\n <GoogleAndYelpTab/>\n <AmbassadorCodeTab/>\n </TabbedForm>\n </Edit>\n );\n};\n","import React, { useState } from 'react';\nimport { Button } from 'react-admin';\nimport { parseBookingSystem } from './util/parseBookingSystem';\nimport { AddLocation } from './components/AddLocation';\nimport { EditBase } from './EditBase'\n\nconst BOOKING_SYSTEMS_TO_ADD_LOCATIONS = ['square', 'boulevard','mindbody', 'zenoti']\n\nexport default (passThroughProps) => {\n const [addLocationMode, setAddLocationMode] = useState(false);\n const [recordToCopy, setRecordToCopy] = useState(undefined);\n\n const handleClickAddLocationButton = ({record}) => {\n setAddLocationMode(true)\n setRecordToCopy(record)\n }\n\n const exitAddLocationMode = () => {\n setAddLocationMode(false)\n }\n\n const AddLocationButton = (props) => {\n if (!BOOKING_SYSTEMS_TO_ADD_LOCATIONS.includes( parseBookingSystem(props.record) )){\n return null\n }\n return <Button label=\"Add Location\" onClick={() => handleClickAddLocationButton(props)}/>\n }\n\n if (addLocationMode){\n return <AddLocation {...passThroughProps} record={recordToCopy} exitAddLocationMode={exitAddLocationMode}/>\n }\n\n return <EditBase {...passThroughProps} AddLocationButton={AddLocationButton}/>\n}\n","import List from './List';\nimport Create from './Create';\nimport Edit from './EditWithAddLocation';\nimport GroupIcon from '@material-ui/icons/Group';\n\nexport default {\n list: List,\n edit: Edit,\n create: Create,\n icon: GroupIcon\n};\n","import React from 'react';\nimport {\n Create,\n SimpleForm,\n TextInput,\n SaveButton,\n NumberInput,\n BooleanInput,\n Toolbar,\n required,\n email\n} from 'react-admin';\nimport { requiredRange, validateWebsite, validateInstagram } from './util/validations'\n\n\nexport default (props) => {\n return (\n <Create {...props}>\n <SimpleForm\n toolbar={\n <Toolbar {...props}>\n <SaveButton />\n </Toolbar>\n }\n >\n <TextInput source=\"name\" validate={required()} className=\"w_50\" />\n <BooleanInput label=\"In-home only\" source=\"inHomeOnly\" />\n <TextInput source=\"neighborhood\" validate={required()} />\n <TextInput source=\"address\" validate={required()} className=\"w_50\" />\n <TextInput source=\"priceRange\" validate={required()} />\n <NumberInput source=\"latitude\" validate={requiredRange(0, 180)} />\n <NumberInput source=\"longitude\" validate={requiredRange(-180, 0)} />\n <TextInput\n source=\"description\"\n multiline\n validate={required()}\n className=\"w_50\"\n />\n <TextInput source=\"website\" validate={validateWebsite()}/>\n <TextInput source=\"instagram\" validate={validateWebsite()}/>\n <TextInput source=\"email\" validate={email()}/>\n <NumberInput\n source=\"cancellationWindow\"\n validate={requiredRange(0, undefined)}\n />\n <NumberInput\n source=\"cancellationAmount\"\n validate={requiredRange(0, undefined)}\n />\n <NumberInput\n source=\"cancellationPercentage\"\n validate={requiredRange(0, 1)}\n />\n <NumberInput\n source=\"takeAmount\"\n validate={requiredRange(0, undefined)}\n />\n <NumberInput source=\"takePercentage\" validate={requiredRange(0, 1)} />\n <TextInput source=\"stripeConnectAccountId\" validate={required()} />\n </SimpleForm>\n </Create>\n );\n};\n","import React from 'react';\nimport {\n Datagrid,\n List,\n Responsive,\n ShowButton,\n SimpleList,\n TextField,\n DateField\n} from 'react-admin';\n\nconst ReviewTextField = ({ record, source }) => {\n const reviewText = record[source] || ''\n const textToDisplay = reviewText && reviewText.length > 40 ? reviewText.slice(0, 40) + '...' : reviewText\n return (\n <span>{textToDisplay}</span>\n )\n};\n\nexport const ReviewList = (props) => (\n <List {...props} sort={{ field: 'name', order: 'asc' }} bulkActionButtons={false} pagination={null}>\n <Responsive\n small={\n <SimpleList linkType=\"show\" primaryText={review => `${review.appointment.user.fullName}, ${review.appointment.provider.name}, ${review.appointment.provider.neighborhood}, ${review.appointment.service.name}`} />\n }\n medium={\n <Datagrid>\n <DateField sortable={false} label='Appt Date' source=\"appointment.dateTime\" />\n <TextField sortable={false} label='User' source=\"appointment.user.fullName\" />\n <TextField sortable={false} label='Provider' source=\"appointment.provider.nameWithNeighborhood\" />\n <TextField sortable={false} label='Service' source=\"appointment.service.name\" />\n <TextField sortable={false} source=\"overall\" />\n <ReviewTextField source=\"text\"/>\n <ShowButton />\n </Datagrid>\n }\n />\n </List>\n)\n\n","import {ReviewList} from './ReviewList';\nimport {ReviewShow} from './ReviewShow';\nimport ReviewsIcon from '@mui/icons-material/Reviews';\n\nexport default {\n list: ReviewList,\n show: ReviewShow,\n icon: ReviewsIcon\n};\n","import React from 'react';\nimport {\n Show,\n SimpleShowLayout,\n TextField,\n DateField\n} from 'react-admin';\nimport { TextFieldPreserveNewlines } from '../../components/TextFieldPreserveNewlines'\n\n\nexport const ReviewShow = (props) => {\nreturn(\n <Show {...props}>\n <SimpleShowLayout>\n <TextFieldPreserveNewlines multiline source=\"text\" />\n <TextField label='User' source=\"appointment.user.fullName\" />\n <TextField label='Provider' source=\"appointment.provider.name\" />\n <TextField label='Neighborhood' source=\"appointment.provider.neighborhood\" />\n <TextField label='Service' source=\"appointment.service.name\" />\n <TextField source=\"overall\" />\n <TextField source=\"quality\" />\n <TextField source=\"ambience\" />\n <TextField source=\"expertise\" />\n <TextField source=\"friendliness\" />\n <TextField source=\"cleanliness\" />\n <TextField source=\"value\" />\n <DateField label='Appointment Date' source=\"appointment.dateTime\" />\n <DateField label='Review Date' source=\"appointment.createdAt\" />\n </SimpleShowLayout>\n </Show>\n)};\n","import React from 'react';\nimport {\n Edit,\n TextInput,\n Toolbar,\n SaveButton,\n SimpleForm,\n} from 'react-admin';\n\nimport { validateTime, validatePMTime, validateOpenAndClose } from '../providers/util/validations'\n\nconst BottomToolbar = props => (\n <Toolbar {...props} >\n <SaveButton disabled={props.pristine} />\n </Toolbar>\n);\n\nexport const ProviderScheduleEdit = (props) => {\n return (\n <Edit {...props}>\n <SimpleForm toolbar={<BottomToolbar/>}>\n <TextInput validate={validateTime} label='Sunday Open' source=\"openHours.Sunday.start\"/>\n <TextInput validate={[validateTime, validatePMTime(), validateOpenAndClose()]} label='Sunday Close' source=\"openHours.Sunday.end\"/>\n <TextInput validate={validateTime} label='Monday Open' source=\"openHours.Monday.start\"/>\n <TextInput validate={[validateTime, validatePMTime(), validateOpenAndClose()]}label='Monday Close' source=\"openHours.Monday.end\"/>\n <TextInput validate={validateTime} label='Tuesday Open' source=\"openHours.Tuesday.start\"/>\n <TextInput validate={[validateTime, validatePMTime(), validateOpenAndClose()]} label='Tuesday Close' source=\"openHours.Tuesday.end\"/>\n <TextInput validate={validateTime} label='Wednesday Open' source=\"openHours.Wednesday.start\"/>\n <TextInput validate={[validateTime, validatePMTime(), validateOpenAndClose()]} label='Wednesday Close' source=\"openHours.Wednesday.end\"/>\n <TextInput validate={validateTime} label='Thursday Open' source=\"openHours.Thursday.start\"/>\n <TextInput validate={[validateTime, validatePMTime(), validateOpenAndClose()]}label='Thursday Close' source=\"openHours.Thursday.end\"/>\n <TextInput validate={validateTime} label='Friday Open' source=\"openHours.Friday.start\"/>\n <TextInput validate={[validateTime, validatePMTime(), validateOpenAndClose()]}label='Friday Close' source=\"openHours.Friday.end\"/>\n <TextInput validate={validateTime} label='Saturday Open' source=\"openHours.Saturday.start\"/>\n <TextInput validate={[validateTime, validatePMTime(), validateOpenAndClose()]} label='Saturday Close' source=\"openHours.Saturday.end\"/>\n </SimpleForm>\n </Edit>\n )\n};\n","import {ProviderScheduleEdit} from './ProviderScheduleEdit';\n\nexport default {\n edit: ProviderScheduleEdit,\n};\n","import React from 'react';\nimport {\n Datagrid,\n List,\n Responsive,\n DateField,\n TextField,\n} from 'react-admin';\nimport moment from 'moment-timezone'\n\nconst SendDate = ({ record }) => {\n let sendDate\n if (record.waitToSend){\n sendDate = record.sendDate\n } else if (record.giftCardCode){\n sendDate = record.redeemedAt ? `Redeemed ${moment(record.redeemedAt).format('YYYY-MM-DD')}` : 'Not Yet Redeemed'\n } else {\n sendDate = 'Instant'\n }\n return (<span>{sendDate}</span>);\n};\n\nconst Recipient = ({ record }) => {\n const recipient = record.receiverEmail || record.receiver?.email\n return (<span>{recipient}</span>);\n};\n\nconst GiftCardType = ({ record }) => {\n const giftCardType = record.giftCardCode ? 'Square' : 'Skoop'\n return (<span>{giftCardType}</span>);\n};\n\nexport const GiftCardList = (props) => (\n <List {...props} sort={{ field: 'createdAt', order: 'asc' }} bulkActionButtons={false} pagination={null}>\n <Responsive\n small={\n <Datagrid>\n <DateField sortable={false} label=\"Purchased on\" source=\"createdAt\" />\n <GiftCardType label=\"Type\"/>\n <SendDate label=\"Sent or Redeemed\"/>\n <TextField sortable={false} label=\"Sender\" source=\"sender.email\" />\n <Recipient label=\"Recipient\"/>\n <TextField sortable={false} source=\"amount\" />\n <TextField sortable={false} source=\"remainingBalance\" />\n </Datagrid>\n }\n />\n </List>\n)\n\n","import { GiftCardList } from './GiftCardList';\nimport GiftIcon from '@mui/icons-material/CardGiftcard';\n\nexport default {\n list: GiftCardList,\n icon: GiftIcon\n};\n","import { SkoopPlusList } from './SkoopPlusList';\nimport PlusIcon from '@mui/icons-material/AddCircle';\n\nexport default {\n list: SkoopPlusList,\n icon: PlusIcon\n};\n","import React from 'react';\nimport {\n Datagrid,\n List,\n Responsive,\n DateField,\n TextField,\n TopToolbar,\n useListContext,\n} from 'react-admin';\n\n\nexport const SkoopPlusList = (props) => {\n const Actions = () => {\n const listContext = useListContext()\n const activeMembers = listContext.ids.filter(id => !listContext.data[id].cancelDate)\n return <TopToolbar>{activeMembers.length} members = ${activeMembers.length * 10 * 12}/yr</TopToolbar>\n }\n\n return (\n <List {...props} sort={{ field: 'createdAt', order: 'asc' }} bulkActionButtons={false} pagination={null} actions={<Actions/>}>\n <Responsive\n small={\n <Datagrid>\n <DateField sortable={false} label=\"Started\" source=\"createdAt\" />\n <TextField sortable={false} label=\"email\" source=\"user.email\" />\n <TextField sortable={false} label=\"name\" source=\"user.fullName\" />\n <DateField sortable={false} label=\"Cancelled\" source=\"cancelDate\" />\n </Datagrid>\n }\n />\n </List>\n)}\n","import { API_URL } from './environment'\n\nexport default {\n // authentication\n login: ({ username, password }) => {\n const request = new Request(`${API_URL}/admin/login`, {\n method: 'POST',\n body: JSON.stringify({ email: username, password }),\n headers: new Headers({ 'Content-Type': 'application/json' }),\n });\n return fetch(request)\n .then(response => {\n if (response.status < 200 || response.status >= 300) {\n throw new Error(response.statusText);\n }\n return response.json();\n })\n .then(auth => {\n console.log('auth', auth)\n localStorage.setItem('auth', JSON.stringify(auth));\n })\n .catch((error) => {\n if (error.message === 'Unauthorized'){\n throw new Error('Invalid credentials')\n } else {\n throw new Error('Network error')\n }\n });\n },\n checkError: (error) => {\n const status = error.status;\n if (status === 401 || status === 403) {\n localStorage.removeItem('auth');\n return Promise.reject({ message: 'Unauthorized' });\n }\n // other error code (404, 500, etc): no need to log out\n return Promise.resolve();\n },\n checkAuth: () => localStorage.getItem('auth')\n ? Promise.resolve()\n : Promise.reject(),\n logout: () => {\n localStorage.removeItem('auth');\n return Promise.resolve();\n },\n getIdentity: () => Promise.resolve(),\n // authorization\n getPermissions: params => Promise.resolve(),\n};","import * as React from \"react\";\nimport { fetchUtils, Admin, Resource } from 'react-admin';\nimport MyDataProvider from './dataProvider';\nimport DateRangeIcon from '@material-ui/icons/DateRange';\nimport GroupAddIcon from '@material-ui/icons/GroupAdd';\nimport CategoryIcon from '@material-ui/icons/Category';\nimport DynamicFeedIcon from '@material-ui/icons/DynamicFeed';\nimport FlareIcon from '@material-ui/icons/Flare';\nimport InfoIcon from '@material-ui/icons/Info';\nimport { AppointmentList, AppointmentEdit } from './models/appointments'\nimport { UserEdit, UserList } from './users'\nimport { ServiceList, ServiceEdit, ServiceCreate } from './services'\nimport { ServiceIncompleteList } from './services_incomplete'\nimport { CategoryList, CategoryEdit } from './categories'\nimport { SubcategoryList, SubcategoryEdit, SubcategoryCreate } from './subcategories'\nimport leads from './models/leads'\nimport leadNotes from './models/lead_notes'\nimport neighborhoods from './models/neighborhoods'\nimport bookingSystems from './models/booking_systems'\nimport referrals from './models/referrals'\nimport curatedLists from './models/curated_lists'\nimport providers from './models/providers'\nimport reviews from './models/reviews'\nimport providerSchedules from './models/provider_schedules'\nimport giftCards from './models/gift_cards'\nimport skoopPlusMemberships from './models/skoop_plus_memberships'\n\nimport authProvider from './authProvider';\nimport { API_URL } from './environment'\n\nconst httpClient = (url, options = {}) => {\n const auth = JSON.parse(localStorage.getItem('auth'));\n const token = auth ? auth.token : null\n if (!options.headers) {\n options.headers = new Headers({ Accept: 'application/json', authorization: token });\n }\n return fetchUtils.fetchJson(url, options);\n};\n\nconst dataProvider = MyDataProvider(API_URL, httpClient);\n\nconst App = () => (\n <Admin dataProvider={dataProvider} authProvider={authProvider}>\n <Resource name=\"appointments\" list={AppointmentList} edit={AppointmentEdit} icon={DateRangeIcon}/>\n <Resource name=\"users\" list={UserList} edit={UserEdit} icon={GroupAddIcon}/>\n <Resource name=\"providers\" {...providers} />\n <Resource name=\"services\" list={ServiceList} edit={ServiceEdit} icon={FlareIcon} create={ServiceCreate}/>\n <Resource options={{label: \"Incomplete Services\"}} name=\"admin/incomplete_services\" list={ServiceIncompleteList} icon={InfoIcon}/>\n <Resource name=\"categories\" list={CategoryList} edit={CategoryEdit} icon={CategoryIcon} />\n <Resource name=\"subcategories\" list={SubcategoryList} icon={DynamicFeedIcon} edit={SubcategoryEdit}/>\n <Resource name=\"leads\" {...leads}/>\n <Resource name=\"lead_notes\" {...leadNotes}/>\n <Resource name=\"neighborhoods\" {...neighborhoods}/>\n <Resource name=\"referrals\" {...referrals}/>\n <Resource name=\"booking_systems\" {...bookingSystems}/>\n <Resource name=\"curated_lists\" {...curatedLists}/>\n <Resource name=\"reviews\" {...reviews}/>\n <Resource name=\"gift_cards\" {...giftCards}/>\n <Resource name=\"skoop_plus_memberships\" options={{ label: 'Skoop+' }} {...skoopPlusMemberships}/>\n <Resource name=\"provider_schedules\" {...providerSchedules}/>\n </Admin>\n);\nexport default App;\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport App from './App';\n\nReactDOM.render(\n <React.StrictMode>\n <App />\n </React.StrictMode>,\n document.getElementById('root')\n);\n"],"sourceRoot":""}