ordering-ui-admin-external 1.6.2 → 1.6.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/_bundles/main.css +134 -129
- package/_bundles/{ordering-ui-admin.488bdda58ba73188d3b5.js → ordering-ui-admin.3ebe4d4f772eaeb4f851.js} +2 -2
- package/_bundles/{ordering-ui-admin.488bdda58ba73188d3b5.js.LICENSE.txt → ordering-ui-admin.3ebe4d4f772eaeb4f851.js.LICENSE.txt} +4 -4
- package/_modules/components/BusinessIntelligence/Reports/index.js +1 -1
- package/_modules/components/CartRecovery/OpenCartsFilterGroup/index.js +1 -1
- package/_modules/components/CartRecovery/RecoveryActionHeader/index.js +1 -1
- package/_modules/components/Delivery/AddressForm/index.js +1 -1
- package/_modules/components/Delivery/DriversCompaniesListing/index.js +1 -1
- package/_modules/components/Delivery/DriversGroupLogs/index.js +2 -2
- package/_modules/components/Delivery/DriversGroupsListing/index.js +1 -1
- package/_modules/components/Home/HomePage/index.js +29 -6
- package/_modules/components/Home/HomePage/styles.js +27 -5
- package/_modules/components/LanguageSelector/index.js +1 -1
- package/_modules/components/Login/LoginForm/index.js +119 -20
- package/_modules/components/Login/LoginForm/styles.js +60 -30
- package/_modules/components/Loyalty/RewardsPrograms/index.js +1 -1
- package/_modules/components/Marketing/CampaignSignUpOption/index.js +1 -1
- package/_modules/components/Marketing/EnterprisePromotionListing/index.js +1 -1
- package/_modules/components/Messages/MessagesListing/styles.js +1 -1
- package/_modules/components/MyProducts/AppLayout/index.js +75 -0
- package/_modules/components/MyProducts/AppLayout/styles.js +41 -0
- package/_modules/components/MyProducts/CallCenterApp/index.js +42 -0
- package/_modules/components/MyProducts/ContentForm/index.js +236 -0
- package/_modules/components/MyProducts/ContentForm/styles.js +32 -0
- package/_modules/components/MyProducts/CustomerApp/index.js +18 -25
- package/_modules/components/MyProducts/DriverApp/index.js +18 -45
- package/_modules/components/MyProducts/KioskApp/index.js +42 -0
- package/_modules/components/MyProducts/OrderingWebsite/index.js +351 -3
- package/_modules/components/MyProducts/OrderingWebsite/styles.js +54 -3
- package/_modules/components/MyProducts/PosApp/index.js +42 -0
- package/_modules/components/MyProducts/StoreApp/index.js +18 -45
- package/_modules/components/MyProducts/index.js +22 -1
- package/_modules/components/OrderingProducts/OrderingProductDetails/index.js +6 -8
- package/_modules/components/OrderingProducts/SiteTheme/index.js +13 -4
- package/_modules/components/Orders/DeliveriesManager/index.js +6 -0
- package/_modules/components/Orders/DriversManager/index.js +7 -1
- package/_modules/components/Orders/GoogleMapsApiKeySettingButton/index.js +110 -0
- package/_modules/components/{MyProducts/CustomerApp/styles.js → Orders/GoogleMapsApiKeySettingButton/style.js} +9 -13
- package/_modules/components/Orders/Messages/styles.js +3 -3
- package/_modules/components/Orders/OrderContactInformation/index.js +7 -7
- package/_modules/components/Orders/OrdersContentHeader/index.js +4 -2
- package/_modules/components/Orders/OrdersManager/index.js +3 -2
- package/_modules/components/Profile/ProfilePage/index.js +2 -1
- package/_modules/components/Profile/ProfilePage/styles.js +2 -2
- package/_modules/components/Profile/Sessions/index.js +209 -0
- package/_modules/components/Profile/Sessions/styles.js +46 -0
- package/_modules/components/Profile/index.js +8 -1
- package/_modules/components/Settings/EmailSetting/index.js +2 -29
- package/_modules/components/Settings/PageForm/index.js +6 -1
- package/_modules/components/Settings/Settings/index.js +0 -62
- package/_modules/components/Shared/CitySelector/index.js +9 -1
- package/_modules/components/Shared/Modal/index.js +5 -3
- package/_modules/components/Shared/Modal/styles.js +25 -23
- package/_modules/components/SidebarMenu/index.js +132 -76
- package/_modules/components/SidebarMenu/styles.js +4 -2
- package/_modules/components/Stores/AddBusinessForm/index.js +22 -8
- package/_modules/components/Stores/BusinessBrandGENDetail/index.js +6 -1
- package/_modules/components/Stores/BusinessProductList/styles.js +1 -1
- package/_modules/components/Stores/BusinessProductsCategories/styles.js +1 -1
- package/_modules/components/Stores/BusinessProductsCategoyInfo/index.js +6 -1
- package/_modules/components/Stores/BusinessProductsListing/index.js +35 -8
- package/_modules/components/Stores/BusinessProductsListing/styles.js +6 -4
- package/_modules/components/Stores/BusinessSelectHeader/index.js +17 -9
- package/_modules/components/Stores/BusinessSelectHeader/styles.js +1 -1
- package/_modules/components/Stores/BusinessSummary/index.js +21 -8
- package/_modules/components/Stores/BusinessSummary/styles.js +5 -3
- package/_modules/components/Stores/BusinessSync/index.js +6 -2
- package/_modules/components/Stores/BusinessSyncItsaCheckmate/index.js +52 -0
- package/_modules/components/Stores/BusinessSyncItsaCheckmate/styles.js +31 -0
- package/_modules/components/Support/index.js +1 -1
- package/_modules/hooks/useCountdownTimer.js +40 -0
- package/_modules/index.js +18 -0
- package/_modules/utils/index.js +65 -4
- package/index-template.js +49 -8
- package/package.json +3 -2
- package/src/components/BusinessIntelligence/Reports/index.js +1 -1
- package/src/components/CartRecovery/OpenCartsFilterGroup/index.js +1 -1
- package/src/components/CartRecovery/RecoveryActionHeader/index.js +1 -1
- package/src/components/Delivery/AddressForm/index.js +1 -1
- package/src/components/Delivery/DriversCompaniesListing/index.js +1 -1
- package/src/components/Delivery/DriversGroupLogs/index.js +1 -1
- package/src/components/Delivery/DriversGroupsListing/index.js +1 -1
- package/src/components/Home/HomePage/index.js +62 -6
- package/src/components/Home/HomePage/styles.js +48 -1
- package/src/components/LanguageSelector/index.js +1 -1
- package/src/components/Login/LoginForm/index.js +211 -94
- package/src/components/Login/LoginForm/styles.js +74 -8
- package/src/components/Loyalty/RewardsPrograms/index.js +1 -1
- package/src/components/Marketing/CampaignSignUpOption/index.js +1 -1
- package/src/components/Marketing/EnterprisePromotionListing/index.js +1 -1
- package/src/components/Messages/MessagesListing/styles.js +3 -5
- package/src/components/MyProducts/AppLayout/index.js +97 -0
- package/src/components/MyProducts/AppLayout/styles.js +145 -0
- package/src/components/MyProducts/CallCenterApp/index.js +29 -0
- package/src/components/MyProducts/ContentForm/index.js +230 -0
- package/src/components/MyProducts/ContentForm/styles.js +67 -0
- package/src/components/MyProducts/CustomerApp/index.js +17 -41
- package/src/components/MyProducts/DriverApp/index.js +16 -70
- package/src/components/MyProducts/KioskApp/index.js +29 -0
- package/src/components/MyProducts/OrderingWebsite/index.js +452 -25
- package/src/components/MyProducts/OrderingWebsite/styles.js +244 -0
- package/src/components/MyProducts/PosApp/index.js +29 -0
- package/src/components/MyProducts/StoreApp/index.js +16 -70
- package/src/components/MyProducts/index.js +7 -1
- package/src/components/OrderingProducts/OrderingProductDetails/index.js +4 -4
- package/src/components/OrderingProducts/SiteTheme/index.js +8 -0
- package/src/components/Orders/DeliveriesManager/index.js +5 -1
- package/src/components/Orders/DriversManager/index.js +7 -1
- package/src/components/Orders/GoogleMapsApiKeySettingButton/index.js +94 -0
- package/src/components/Orders/GoogleMapsApiKeySettingButton/style.js +38 -0
- package/src/components/Orders/Messages/styles.js +6 -0
- package/src/components/Orders/OrderContactInformation/index.js +1 -1
- package/src/components/Orders/OrdersContentHeader/index.js +6 -1
- package/src/components/Orders/OrdersManager/index.js +2 -1
- package/src/components/Profile/ProfilePage/index.js +2 -0
- package/src/components/Profile/ProfilePage/styles.js +2 -1
- package/src/components/Profile/Sessions/index.js +209 -0
- package/src/components/Profile/Sessions/styles.js +132 -0
- package/src/components/Profile/index.js +3 -1
- package/src/components/Settings/EmailSetting/index.js +0 -32
- package/src/components/Settings/PageForm/index.js +3 -0
- package/src/components/Settings/Settings/index.js +0 -65
- package/src/components/Shared/CitySelector/index.js +8 -0
- package/src/components/Shared/Modal/index.js +32 -26
- package/src/components/Shared/Modal/styles.js +11 -3
- package/src/components/SidebarMenu/index.js +92 -70
- package/src/components/SidebarMenu/styles.js +8 -1
- package/src/components/Stores/AddBusinessForm/index.js +10 -8
- package/src/components/Stores/BusinessBrandGENDetail/index.js +3 -0
- package/src/components/Stores/BusinessProductList/styles.js +1 -1
- package/src/components/Stores/BusinessProductsCategories/styles.js +1 -1
- package/src/components/Stores/BusinessProductsCategoyInfo/index.js +3 -0
- package/src/components/Stores/BusinessProductsListing/index.js +35 -1
- package/src/components/Stores/BusinessProductsListing/styles.js +9 -1
- package/src/components/Stores/BusinessSelectHeader/index.js +14 -2
- package/src/components/Stores/BusinessSelectHeader/styles.js +5 -0
- package/src/components/Stores/BusinessSummary/index.js +27 -10
- package/src/components/Stores/BusinessSummary/styles.js +7 -0
- package/src/components/Stores/BusinessSync/index.js +7 -2
- package/src/components/Stores/BusinessSyncItsaCheckmate/index.js +63 -0
- package/src/components/Stores/BusinessSyncItsaCheckmate/styles.js +88 -0
- package/src/components/Support/index.js +1 -1
- package/src/hooks/useCountdownTimer.js +26 -0
- package/src/index.js +7 -1
- package/src/utils/index.js +61 -0
- package/template/app.js +14 -12
- package/template/assets/images/ItsaCheckmateLogo.png +0 -0
- package/template/assets/images/door-dash.png +0 -0
- package/template/assets/images/myProducts/driver-app-brand.png +0 -0
- package/template/assets/images/myProducts/driver-app-free.png +0 -0
- package/template/assets/images/myProducts/multi-store-customer-app.png +0 -0
- package/template/assets/images/myProducts/my-callcenter-app-brand.png +0 -0
- package/template/assets/images/myProducts/my-callcenter-app-live.png +0 -0
- package/template/assets/images/myProducts/my-kiosk-app-brand.png +0 -0
- package/template/assets/images/myProducts/my-kiosk-app-live.png +0 -0
- package/template/assets/images/myProducts/my-pos-app-brand.png +0 -0
- package/template/assets/images/myProducts/my-pos-app-live.png +0 -0
- package/template/assets/images/myProducts/single-store-customer-app.png +0 -0
- package/template/assets/images/myProducts/store-app-brand.png +0 -0
- package/template/assets/images/myProducts/store-app-free.png +0 -0
- package/template/assets/images/projectStatuses/project-active.png +0 -0
- package/template/assets/images/projectStatuses/project-past-due-payment.png +0 -0
- package/template/components/AutologinParams/index.js +79 -0
- package/template/components/ListenPageChanges/index.js +3 -2
- package/template/config.json +1 -0
- package/template/helmetdata.json +21 -0
- package/template/pages/CallCenterApp/index.js +12 -0
- package/template/pages/KioskApp/index.js +12 -0
- package/template/pages/PosApp/index.js +12 -0
- package/template/theme.json +3 -0
- package/_modules/components/MyProducts/DriverApp/styles.js +0 -29
- package/_modules/components/MyProducts/StoreApp/styles.js +0 -29
- package/src/components/MyProducts/CustomerApp/styles.js +0 -59
- package/src/components/MyProducts/DriverApp/styles.js +0 -104
- package/src/components/MyProducts/StoreApp/styles.js +0 -104
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import styled, { css } from 'styled-components'
|
|
2
|
+
|
|
3
|
+
export const Container = styled.div`
|
|
4
|
+
flex: 1;
|
|
5
|
+
padding: 25px 20px;
|
|
6
|
+
box-sizing: border-box;
|
|
7
|
+
transition: all 0.5s;
|
|
8
|
+
max-height: 100vh;
|
|
9
|
+
overflow: auto;
|
|
10
|
+
min-height: 100vh;
|
|
11
|
+
`
|
|
12
|
+
export const HeaderTitleContainer = styled.div`
|
|
13
|
+
display: flex;
|
|
14
|
+
align-items: center;
|
|
15
|
+
|
|
16
|
+
> h1 {
|
|
17
|
+
font-weight: 700;
|
|
18
|
+
font-size: 20px;
|
|
19
|
+
color: ${props => props.theme.colors.headingColor};
|
|
20
|
+
margin: 0px;
|
|
21
|
+
line-height: 32px;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
> button {
|
|
25
|
+
${props => props.theme?.rtl ? css`
|
|
26
|
+
margin-left: 8px;
|
|
27
|
+
margin-right: -8px;
|
|
28
|
+
` : css`
|
|
29
|
+
margin-right: 8px;
|
|
30
|
+
margin-left: -8px;
|
|
31
|
+
`}
|
|
32
|
+
|
|
33
|
+
svg {
|
|
34
|
+
width: 25px;
|
|
35
|
+
height: 25px;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
`
|
|
39
|
+
export const ContentWrapper = styled.div`
|
|
40
|
+
padding: 20px 0;
|
|
41
|
+
|
|
42
|
+
> h1 {
|
|
43
|
+
font-size: 24px;
|
|
44
|
+
font-weight: 700;
|
|
45
|
+
margin: 0;
|
|
46
|
+
}
|
|
47
|
+
> p {
|
|
48
|
+
font-size: 14px;
|
|
49
|
+
margin: 8px 0;
|
|
50
|
+
}
|
|
51
|
+
@media (min-width: 1024px) {
|
|
52
|
+
> h1 {
|
|
53
|
+
font-size: 32px;
|
|
54
|
+
line-height: 48px;
|
|
55
|
+
}
|
|
56
|
+
> p {
|
|
57
|
+
font-size: 16px;
|
|
58
|
+
line-height: 24px;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
`
|
|
62
|
+
export const BoxWrapper = styled.div`
|
|
63
|
+
display: flex;
|
|
64
|
+
flex-direction: column;
|
|
65
|
+
|
|
66
|
+
@media (min-width: 1024px) {
|
|
67
|
+
flex-direction: row;
|
|
68
|
+
justify-content: space-between;
|
|
69
|
+
}
|
|
70
|
+
`
|
|
71
|
+
export const AppInfoContainer = styled.div`
|
|
72
|
+
margin-top: 36px;
|
|
73
|
+
display: flex;
|
|
74
|
+
flex-direction: column;
|
|
75
|
+
box-shadow: 0px 1px 4px rgba(0, 0, 0, 0.1);
|
|
76
|
+
border-radius: 8px;
|
|
77
|
+
padding: 45px 25px;
|
|
78
|
+
|
|
79
|
+
h2 {
|
|
80
|
+
font-size: 24px;
|
|
81
|
+
margin-top: 0;
|
|
82
|
+
margin-bottom: 32px;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
p {
|
|
86
|
+
font-size: 14px;
|
|
87
|
+
margin: 0;
|
|
88
|
+
}
|
|
89
|
+
@media (min-width: 1024px) {
|
|
90
|
+
width: calc(50% - 23px);
|
|
91
|
+
h2 {
|
|
92
|
+
font-size: 32px;
|
|
93
|
+
line-height: 48px;
|
|
94
|
+
}
|
|
95
|
+
p {
|
|
96
|
+
font-size: 16px;
|
|
97
|
+
line-height: 24px;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
`
|
|
101
|
+
export const ImageWrapper = styled.div`
|
|
102
|
+
flex: 1;
|
|
103
|
+
margin-bottom: 25px;
|
|
104
|
+
display: flex;
|
|
105
|
+
align-items: center;
|
|
106
|
+
justify-content: center;
|
|
107
|
+
img {
|
|
108
|
+
width: 100%;
|
|
109
|
+
max-width: 430px;
|
|
110
|
+
}
|
|
111
|
+
`
|
|
112
|
+
export const AppStoreLinksWrapper = styled.div`
|
|
113
|
+
margin-top: 33px;
|
|
114
|
+
display: flex;
|
|
115
|
+
> a {
|
|
116
|
+
&:not(:first-child) {
|
|
117
|
+
${props => props.theme?.rtl ? css`
|
|
118
|
+
margin-right: 24px;
|
|
119
|
+
` : css`
|
|
120
|
+
margin-left: 24px;
|
|
121
|
+
`}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
`
|
|
125
|
+
export const DownloadLink = styled.a`
|
|
126
|
+
flex: 1;
|
|
127
|
+
img {
|
|
128
|
+
width: 100%;
|
|
129
|
+
object-fit: cover;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
${({ isSingle }) => isSingle ? css`
|
|
133
|
+
margin: 0 auto;
|
|
134
|
+
text-decoration: underline;
|
|
135
|
+
` : css`
|
|
136
|
+
max-width: 200px;
|
|
137
|
+
`}
|
|
138
|
+
`
|
|
139
|
+
export const ButtonWRapper = styled.div`
|
|
140
|
+
margin-top: 31px;
|
|
141
|
+
button {
|
|
142
|
+
height: 44px;
|
|
143
|
+
min-width: 250px;
|
|
144
|
+
}
|
|
145
|
+
`
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
import { useLanguage } from 'ordering-components-admin-external'
|
|
3
|
+
import { useTheme } from 'styled-components'
|
|
4
|
+
import { AppLayout } from '../AppLayout'
|
|
5
|
+
|
|
6
|
+
export const CallCenterApp = () => {
|
|
7
|
+
const [, t] = useLanguage()
|
|
8
|
+
const theme = useTheme()
|
|
9
|
+
|
|
10
|
+
const appInfo = {
|
|
11
|
+
title: t('ORDERING_CALL_CENTER_APP', 'Ordering Call Center App'),
|
|
12
|
+
description: t('CALL_CENTER_DESCRIPTION', 'Give this tool to your team of agents, capture orders in just a few seconds, and keep offering the best customer experience possible.'),
|
|
13
|
+
images: {
|
|
14
|
+
live: theme.images.myProducts.myCallcenterAppLive,
|
|
15
|
+
brand: theme.images.myProducts.myCallcenterAppBrand
|
|
16
|
+
},
|
|
17
|
+
live_title: t('LIVE_DEMO', 'Live Demo'),
|
|
18
|
+
live_description: t('APP_LIVE_DEMO_DESCRIPTION', 'This is a branded Ordering.co product; play with it and understand how it works'),
|
|
19
|
+
web_url: 'https://callcenter.tryordering.com/search',
|
|
20
|
+
web_link_title: t('CALL_CENTER', 'Call center'),
|
|
21
|
+
brand_title: t('YOUR_BRANDED_KIOSK', 'Your Branded Kiosk'),
|
|
22
|
+
brand_description: t('CALL_CENTER_BRANDED_DESCRIPTION', 'The Call Center is delivered in less than five working days, fully branded with your guidelines, and ready to be used on any tablet or device you add it to.'),
|
|
23
|
+
purchase_link: 'https://www.ordering.co/ordering-sales'
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
return (
|
|
27
|
+
<AppLayout appInfo={appInfo} />
|
|
28
|
+
)
|
|
29
|
+
}
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
import React, { useEffect, useState } from 'react'
|
|
2
|
+
import { useLanguage, ContentForm as ContentFormController } from 'ordering-components-admin-external'
|
|
3
|
+
import { Button } from '../../../styles'
|
|
4
|
+
|
|
5
|
+
import $ from 'jquery'
|
|
6
|
+
import ReactSummernote from 'react-summernote'
|
|
7
|
+
import 'react-summernote/dist/react-summernote.css'
|
|
8
|
+
import 'bootstrap/js/dist/modal'
|
|
9
|
+
import 'bootstrap/js/dist/dropdown'
|
|
10
|
+
import 'bootstrap/js/dist/tooltip'
|
|
11
|
+
import 'bootstrap/dist/css/bootstrap.css'
|
|
12
|
+
|
|
13
|
+
import { Alert, Modal } from '../../Shared'
|
|
14
|
+
import { InsertLink } from '../../Settings/InsertLink'
|
|
15
|
+
import { InsertVideo } from '../../Settings/InsertVideo'
|
|
16
|
+
import { InsertImage } from '../../Settings/InsertImage'
|
|
17
|
+
|
|
18
|
+
import {
|
|
19
|
+
PageContainer,
|
|
20
|
+
Header,
|
|
21
|
+
WrapperEditor,
|
|
22
|
+
ButtonGroupWrapper
|
|
23
|
+
} from './styles'
|
|
24
|
+
|
|
25
|
+
const ContentFormUI = (props) => {
|
|
26
|
+
const {
|
|
27
|
+
formState,
|
|
28
|
+
imageListState,
|
|
29
|
+
insertImageState,
|
|
30
|
+
handleInsertImage,
|
|
31
|
+
handleDeleteImage,
|
|
32
|
+
handleChangeFormState,
|
|
33
|
+
handleSave,
|
|
34
|
+
selectedImageUrl,
|
|
35
|
+
setSelectedImageUrl,
|
|
36
|
+
handleDelete,
|
|
37
|
+
title,
|
|
38
|
+
content
|
|
39
|
+
} = props
|
|
40
|
+
|
|
41
|
+
const [, t] = useLanguage()
|
|
42
|
+
const [openModal, setOpenModal] = useState(null)
|
|
43
|
+
const [editorContext, setEditorContext] = useState(null)
|
|
44
|
+
const [alertState, setAlertState] = useState({ open: false, content: [] })
|
|
45
|
+
const [pageContent, setPageContent] = useState(null)
|
|
46
|
+
|
|
47
|
+
const insertLink = (context) => {
|
|
48
|
+
const ui = $.summernote.ui
|
|
49
|
+
const button = ui.button({
|
|
50
|
+
contents: '<i class="note-icon-link"/>',
|
|
51
|
+
tooltip: 'link',
|
|
52
|
+
class: 'note-btn',
|
|
53
|
+
click: () => {
|
|
54
|
+
setEditorContext(context)
|
|
55
|
+
context.invoke('editor.saveRange')
|
|
56
|
+
setOpenModal('link')
|
|
57
|
+
}
|
|
58
|
+
})
|
|
59
|
+
return button.render()
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
const handleRestoreEditor = () => editorContext.invoke('restoreRange')
|
|
63
|
+
|
|
64
|
+
const insertImage = (context) => {
|
|
65
|
+
const ui = $.summernote.ui
|
|
66
|
+
const button = ui.button({
|
|
67
|
+
contents: '<i class="note-icon-picture"/>',
|
|
68
|
+
tooltip: 'picture',
|
|
69
|
+
class: 'note-btn',
|
|
70
|
+
click: () => {
|
|
71
|
+
setEditorContext(context)
|
|
72
|
+
context.invoke('editor.saveRange')
|
|
73
|
+
setOpenModal('image')
|
|
74
|
+
}
|
|
75
|
+
})
|
|
76
|
+
return button.render()
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
const insertVideo = (context) => {
|
|
80
|
+
const ui = $.summernote.ui
|
|
81
|
+
const button = ui.button({
|
|
82
|
+
contents: '<i class="note-icon-video"/>',
|
|
83
|
+
tooltip: 'video',
|
|
84
|
+
class: 'note-btn',
|
|
85
|
+
click: () => {
|
|
86
|
+
setEditorContext(context)
|
|
87
|
+
context.invoke('editor.saveRange')
|
|
88
|
+
setOpenModal('video')
|
|
89
|
+
}
|
|
90
|
+
})
|
|
91
|
+
return button.render()
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
const handleCloseModal = () => {
|
|
95
|
+
setOpenModal(false)
|
|
96
|
+
setEditorContext(null)
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
useEffect(() => {
|
|
100
|
+
if (!formState?.error) return
|
|
101
|
+
setAlertState({
|
|
102
|
+
open: true,
|
|
103
|
+
content: formState?.error
|
|
104
|
+
})
|
|
105
|
+
}, [formState?.error])
|
|
106
|
+
|
|
107
|
+
useEffect(() => {
|
|
108
|
+
if (!pageContent) return
|
|
109
|
+
handleChangeFormState('body', pageContent)
|
|
110
|
+
}, [pageContent])
|
|
111
|
+
|
|
112
|
+
const onInit = (note) => {
|
|
113
|
+
note.reset()
|
|
114
|
+
const regex = /(\<\w*)((\s\/\>)|(.*\<\/\w*\>))/i
|
|
115
|
+
if (content.match(regex) !== null) {
|
|
116
|
+
note.replace(content)
|
|
117
|
+
} else {
|
|
118
|
+
note.insertText(content)
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
return (
|
|
123
|
+
<>
|
|
124
|
+
<PageContainer>
|
|
125
|
+
<Header>
|
|
126
|
+
<h1>{title}</h1>
|
|
127
|
+
</Header>
|
|
128
|
+
<WrapperEditor>
|
|
129
|
+
<ReactSummernote
|
|
130
|
+
onInit={onInit}
|
|
131
|
+
placeholder={t('START_NEW_PAGE')}
|
|
132
|
+
options={{
|
|
133
|
+
height: 350,
|
|
134
|
+
fontNames: ['Arial', 'Arial Black', 'Comic Sans MS', 'Courier New'],
|
|
135
|
+
toolbar: [
|
|
136
|
+
['style', ['style']],
|
|
137
|
+
['font', ['bold', 'italic', 'underline', 'clear']],
|
|
138
|
+
['fontsize', ['fontsize']],
|
|
139
|
+
['color', ['color']],
|
|
140
|
+
['para', ['ul', 'paragraph']],
|
|
141
|
+
['table', ['table']],
|
|
142
|
+
['insert', ['insertLink', 'insertImage', 'insertVideo']],
|
|
143
|
+
['codeview', ['codeview']]
|
|
144
|
+
],
|
|
145
|
+
buttons: {
|
|
146
|
+
insertLink: insertLink,
|
|
147
|
+
insertImage: insertImage,
|
|
148
|
+
insertVideo: insertVideo
|
|
149
|
+
}
|
|
150
|
+
}}
|
|
151
|
+
onChange={content => setPageContent(content)}
|
|
152
|
+
/>
|
|
153
|
+
</WrapperEditor>
|
|
154
|
+
<ButtonGroupWrapper>
|
|
155
|
+
<Button
|
|
156
|
+
borderRadius='8px'
|
|
157
|
+
color='primary'
|
|
158
|
+
disabled={Object.keys(formState.changes).length === 0}
|
|
159
|
+
onClick={() => handleSave()}
|
|
160
|
+
>
|
|
161
|
+
{t('ACCEPT', 'Accept')}
|
|
162
|
+
</Button>
|
|
163
|
+
<Button
|
|
164
|
+
borderRadius='8px'
|
|
165
|
+
color='secundaryDark'
|
|
166
|
+
onClick={() => handleDelete()}
|
|
167
|
+
>
|
|
168
|
+
{t('DELETE', 'Delete')}
|
|
169
|
+
</Button>
|
|
170
|
+
</ButtonGroupWrapper>
|
|
171
|
+
</PageContainer>
|
|
172
|
+
<Modal
|
|
173
|
+
width='60%'
|
|
174
|
+
open={openModal === 'link'}
|
|
175
|
+
onClose={() => setOpenModal(null)}
|
|
176
|
+
>
|
|
177
|
+
<InsertLink
|
|
178
|
+
editorContext={editorContext}
|
|
179
|
+
handleRestoreEditor={handleRestoreEditor}
|
|
180
|
+
onClose={() => handleCloseModal()}
|
|
181
|
+
/>
|
|
182
|
+
</Modal>
|
|
183
|
+
<Modal
|
|
184
|
+
width='60%'
|
|
185
|
+
open={openModal === 'video'}
|
|
186
|
+
onClose={() => setOpenModal(null)}
|
|
187
|
+
>
|
|
188
|
+
<InsertVideo
|
|
189
|
+
editorContext={editorContext}
|
|
190
|
+
handleRestoreEditor={handleRestoreEditor}
|
|
191
|
+
onClose={() => handleCloseModal()}
|
|
192
|
+
/>
|
|
193
|
+
</Modal>
|
|
194
|
+
<Modal
|
|
195
|
+
width='60%'
|
|
196
|
+
open={openModal === 'image'}
|
|
197
|
+
onClose={() => setOpenModal(null)}
|
|
198
|
+
>
|
|
199
|
+
<InsertImage
|
|
200
|
+
imageListState={imageListState}
|
|
201
|
+
editorContext={editorContext}
|
|
202
|
+
handleRestoreEditor={handleRestoreEditor}
|
|
203
|
+
onClose={() => handleCloseModal()}
|
|
204
|
+
insertImageState={insertImageState}
|
|
205
|
+
handleInsertImage={handleInsertImage}
|
|
206
|
+
handleDeleteImage={handleDeleteImage}
|
|
207
|
+
selectedImageUrl={selectedImageUrl}
|
|
208
|
+
setSelectedImageUrl={setSelectedImageUrl}
|
|
209
|
+
/>
|
|
210
|
+
</Modal>
|
|
211
|
+
<Alert
|
|
212
|
+
title={t('BUSINESS', 'Business')}
|
|
213
|
+
content={alertState.content}
|
|
214
|
+
acceptText={t('ACCEPT', 'Accept')}
|
|
215
|
+
open={alertState.open}
|
|
216
|
+
onClose={() => setAlertState({ open: false, content: [] })}
|
|
217
|
+
onAccept={() => setAlertState({ open: false, content: [] })}
|
|
218
|
+
closeOnBackdrop={false}
|
|
219
|
+
/>
|
|
220
|
+
</>
|
|
221
|
+
)
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
export const ContentForm = (props) => {
|
|
225
|
+
const contentFormProps = {
|
|
226
|
+
...props,
|
|
227
|
+
UIComponent: ContentFormUI
|
|
228
|
+
}
|
|
229
|
+
return <ContentFormController {...contentFormProps} />
|
|
230
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import styled, { css } from 'styled-components'
|
|
2
|
+
|
|
3
|
+
export const PageContainer = styled.div`
|
|
4
|
+
`
|
|
5
|
+
|
|
6
|
+
export const Header = styled.div`
|
|
7
|
+
display: flex;
|
|
8
|
+
align-items: center;
|
|
9
|
+
h1 {
|
|
10
|
+
font-size: 20px;
|
|
11
|
+
font-weight: 700;
|
|
12
|
+
margin-bottom: 0px;
|
|
13
|
+
|
|
14
|
+
${props => props.theme?.rtl ? css`
|
|
15
|
+
margin-left: 20px;
|
|
16
|
+
` : css`
|
|
17
|
+
margin-right: 20px;
|
|
18
|
+
`}
|
|
19
|
+
}
|
|
20
|
+
`
|
|
21
|
+
|
|
22
|
+
export const WrapperEditor = styled.div`
|
|
23
|
+
margin-top: 40px;
|
|
24
|
+
|
|
25
|
+
.note-editor {
|
|
26
|
+
border-radius: 8px;
|
|
27
|
+
border: 1px solid ${props => props.theme.colors.borderColor};
|
|
28
|
+
|
|
29
|
+
.note-toolbar {
|
|
30
|
+
border-bottom: 1px solid ${props => props.theme.colors.borderColor};
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.note-btn {
|
|
34
|
+
&:hover,
|
|
35
|
+
&:focus {
|
|
36
|
+
background-color: ${props => props.theme.colors.secundaryDarkContrast};
|
|
37
|
+
box-shadow: none;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
.note-dropdown-menu {
|
|
42
|
+
a {
|
|
43
|
+
color: #000;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
h1 {
|
|
47
|
+
font-size: 36px;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
`
|
|
52
|
+
|
|
53
|
+
export const ButtonGroupWrapper = styled.div`
|
|
54
|
+
margin-top: 25px;
|
|
55
|
+
display: flex;
|
|
56
|
+
align-items: center;
|
|
57
|
+
> button {
|
|
58
|
+
height: 44px;
|
|
59
|
+
&:last-child {
|
|
60
|
+
${props => props.theme?.rtl ? css`
|
|
61
|
+
margin-right: 14px;
|
|
62
|
+
` : css`
|
|
63
|
+
margin-left: 14px;
|
|
64
|
+
`}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
`
|
|
@@ -1,52 +1,28 @@
|
|
|
1
1
|
import React from 'react'
|
|
2
2
|
import { useLanguage } from 'ordering-components-admin-external'
|
|
3
|
-
import { useInfoShare } from '../../../contexts/InfoShareContext'
|
|
4
|
-
import { IconButton, Button } from '../../../styles'
|
|
5
|
-
import { List as MenuIcon } from 'react-bootstrap-icons'
|
|
6
3
|
import { useTheme } from 'styled-components'
|
|
7
|
-
import {
|
|
8
|
-
Container,
|
|
9
|
-
HeaderTitleContainer,
|
|
10
|
-
ContentWrapper,
|
|
11
|
-
ButtonWrapper
|
|
12
|
-
} from './styles'
|
|
13
|
-
import { BoxLayout } from '../BoxLayout'
|
|
4
|
+
import { AppLayout } from '../AppLayout'
|
|
14
5
|
|
|
15
6
|
export const CustomerApp = () => {
|
|
16
7
|
const [, t] = useLanguage()
|
|
17
8
|
const theme = useTheme()
|
|
18
|
-
|
|
9
|
+
|
|
10
|
+
const appInfo = {
|
|
11
|
+
title: t('CUSTOMER_APP', 'Customer App'),
|
|
12
|
+
description: t('CUSTOMER_APP_DESCRIPTION', 'Give your business owners or managers a tool to manage their whole business\'s incoming orders on the go by installing this app on any mobile device they have.'),
|
|
13
|
+
images: {
|
|
14
|
+
live: theme.images.myProducts.multiStoreCustomerApp,
|
|
15
|
+
brand: theme.images.myProducts.singleStoreCustomerApp
|
|
16
|
+
},
|
|
17
|
+
live_title: t('MULTI-STORE-CUSTOMER-APP', 'Multi-store Customer App'),
|
|
18
|
+
live_description: t('FREE_TO_USE_DESCRIPTION', 'This is a branded Ordering.co product. use it with your project, email, and password for free. features might be limited.'),
|
|
19
|
+
live_purchase_link: 'https://www.ordering.co/ordering-sales',
|
|
20
|
+
brand_title: t('SINGLE_STORE_CUSTOMER_APP', 'Single Store Customer App'),
|
|
21
|
+
brand_description: t('BRANDED_APP_DESCRIPTION', 'This App is delivered in less than five working days, fully branded with your guidelines, removing all ordering.co presence to give your brand more awareness.'),
|
|
22
|
+
purchase_link: 'https://www.ordering.co/ordering-sales'
|
|
23
|
+
}
|
|
19
24
|
|
|
20
25
|
return (
|
|
21
|
-
<
|
|
22
|
-
<HeaderTitleContainer>
|
|
23
|
-
{isCollapse && (
|
|
24
|
-
<IconButton
|
|
25
|
-
color='black'
|
|
26
|
-
onClick={() => handleMenuCollapse(false)}
|
|
27
|
-
>
|
|
28
|
-
<MenuIcon />
|
|
29
|
-
</IconButton>
|
|
30
|
-
)}
|
|
31
|
-
<h1>{t('MY_PRODUCTS', 'My products')}</h1>
|
|
32
|
-
</HeaderTitleContainer>
|
|
33
|
-
<ContentWrapper>
|
|
34
|
-
<BoxLayout
|
|
35
|
-
title={t('CUSTOMER_APP', 'Customer app')}
|
|
36
|
-
photo={theme.images.myProducts.customerApp}
|
|
37
|
-
description={t('CUSTOMER_APP_DESC', 'Give your customers the chance to order from their mobile devices wherever they are, receive push notifications, offers, and much more.')}
|
|
38
|
-
>
|
|
39
|
-
<ButtonWrapper>
|
|
40
|
-
<Button
|
|
41
|
-
color='primary'
|
|
42
|
-
borderRadius='8px'
|
|
43
|
-
onClick={() => window.open('https://www.ordering.co/ordering-sales', '_blank')}
|
|
44
|
-
>
|
|
45
|
-
{t('REQUEST_APP_NOW', 'Request app now')}
|
|
46
|
-
</Button>
|
|
47
|
-
</ButtonWrapper>
|
|
48
|
-
</BoxLayout>
|
|
49
|
-
</ContentWrapper>
|
|
50
|
-
</Container>
|
|
26
|
+
<AppLayout appInfo={appInfo} />
|
|
51
27
|
)
|
|
52
28
|
}
|
|
@@ -1,83 +1,29 @@
|
|
|
1
1
|
import React from 'react'
|
|
2
2
|
import { useLanguage } from 'ordering-components-admin-external'
|
|
3
|
-
import { useInfoShare } from '../../../contexts/InfoShareContext'
|
|
4
|
-
import { Button, IconButton } from '../../../styles'
|
|
5
|
-
import { List as MenuIcon } from 'react-bootstrap-icons'
|
|
6
3
|
import { useTheme } from 'styled-components'
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
Container,
|
|
10
|
-
HeaderTitleContainer,
|
|
11
|
-
ContentWrapper,
|
|
12
|
-
FreeBtnWrapper,
|
|
13
|
-
BrandedBtnWrapper
|
|
14
|
-
} from './styles'
|
|
4
|
+
import { AppLayout } from '../AppLayout'
|
|
15
5
|
|
|
16
6
|
export const DriverApp = () => {
|
|
17
7
|
const [, t] = useLanguage()
|
|
18
8
|
const theme = useTheme()
|
|
19
|
-
const [{ isCollapse }, { handleMenuCollapse }] = useInfoShare()
|
|
20
9
|
|
|
21
|
-
const
|
|
22
|
-
|
|
10
|
+
const appInfo = {
|
|
11
|
+
title: t('DRIVER_APP', 'Driver App'),
|
|
12
|
+
description: t('DRIVER_APP_DESCRIPTION', 'Your fleet\'s best companion gives drivers a tool to receive orders, follow optimal routes, add delivery evidence, set orders\' timing, and control their busy times.'),
|
|
13
|
+
images: {
|
|
14
|
+
live: theme.images.myProducts.driverAppFree,
|
|
15
|
+
brand: theme.images.myProducts.driverAppBrand
|
|
16
|
+
},
|
|
17
|
+
live_title: t('FREE_TO_USE', 'Free to use'),
|
|
18
|
+
live_description: t('FREE_TO_USE_DESCRIPTION', 'This is a branded Ordering.co product. use it with your project, email, and password for free. features might be limited.'),
|
|
19
|
+
apple_store_link: 'https://apps.apple.com/us/app/driver-app-2-0/id1606257815',
|
|
20
|
+
google_play_link: 'https://play.google.com/store/apps/details?id=com.ordering.deliveryv5',
|
|
21
|
+
brand_title: t('YOUR_BRANDED_APP', 'Your Branded App'),
|
|
22
|
+
brand_description: t('BRANDED_APP_DESCRIPTION', 'This App is delivered in less than five working days, fully branded with your guidelines, removing all ordering.co presence to give your brand more awareness.'),
|
|
23
|
+
purchase_link: 'https://www.ordering.co/ordering-sales'
|
|
23
24
|
}
|
|
24
25
|
|
|
25
26
|
return (
|
|
26
|
-
<
|
|
27
|
-
<HeaderTitleContainer>
|
|
28
|
-
{isCollapse && (
|
|
29
|
-
<IconButton
|
|
30
|
-
color='black'
|
|
31
|
-
onClick={() => handleMenuCollapse(false)}
|
|
32
|
-
>
|
|
33
|
-
<MenuIcon />
|
|
34
|
-
</IconButton>
|
|
35
|
-
)}
|
|
36
|
-
<h1>{t('MY_PRODUCTS', 'My products')}</h1>
|
|
37
|
-
</HeaderTitleContainer>
|
|
38
|
-
<ContentWrapper>
|
|
39
|
-
<h1>{t('DRIVER_APP', 'Driver app')}</h1>
|
|
40
|
-
<p>{t('DRIVER_APP_DESC', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.')}</p>
|
|
41
|
-
<BoxLayout
|
|
42
|
-
title={t('FREE_TO_USE', 'Free to use')}
|
|
43
|
-
description={t('FREE_TO_USE_DESC', 'This app can be used by your fleet with the ordering.co logo.')}
|
|
44
|
-
photo={theme.images.myProducts.driverApp}
|
|
45
|
-
>
|
|
46
|
-
<FreeBtnWrapper>
|
|
47
|
-
<Button
|
|
48
|
-
color='primary'
|
|
49
|
-
borderRadius='8px'
|
|
50
|
-
outline
|
|
51
|
-
onClick={() => handleOpenURL('https://apps.apple.com/us/app/driver-app-2-0/id1606257815')}
|
|
52
|
-
>
|
|
53
|
-
{t('DOWNLOAD_APPLE', 'Download apple')}
|
|
54
|
-
</Button>
|
|
55
|
-
<Button
|
|
56
|
-
color='primary'
|
|
57
|
-
borderRadius='8px'
|
|
58
|
-
outline
|
|
59
|
-
onClick={() => handleOpenURL('https://play.google.com/store/apps/details?id=com.ordering.deliveryv5')}
|
|
60
|
-
>
|
|
61
|
-
{t('DOWNLOAD_GOOGLE', 'Download google')}
|
|
62
|
-
</Button>
|
|
63
|
-
</FreeBtnWrapper>
|
|
64
|
-
</BoxLayout>
|
|
65
|
-
<BoxLayout
|
|
66
|
-
title={t('BRANDED_BY_YOU', 'Branded by you')}
|
|
67
|
-
description={t('BRANDED_BY_YOU_DESC', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Id mi quam aenean in faucibus ac integer libero. Eu egestas sit imperdiet at sit adipiscing ullamcorper sed sit.')}
|
|
68
|
-
photo={theme.images.myProducts.driverApp}
|
|
69
|
-
>
|
|
70
|
-
<BrandedBtnWrapper>
|
|
71
|
-
<Button
|
|
72
|
-
color='primary'
|
|
73
|
-
borderRadius='8px'
|
|
74
|
-
onClick={() => handleOpenURL('https://www.ordering.co/ordering-sales')}
|
|
75
|
-
>
|
|
76
|
-
{t('REQUEST_APP_NOW', 'Request app now')}
|
|
77
|
-
</Button>
|
|
78
|
-
</BrandedBtnWrapper>
|
|
79
|
-
</BoxLayout>
|
|
80
|
-
</ContentWrapper>
|
|
81
|
-
</Container>
|
|
27
|
+
<AppLayout appInfo={appInfo} />
|
|
82
28
|
)
|
|
83
29
|
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
import { useLanguage } from 'ordering-components-admin-external'
|
|
3
|
+
import { useTheme } from 'styled-components'
|
|
4
|
+
import { AppLayout } from '../AppLayout'
|
|
5
|
+
|
|
6
|
+
export const KioskApp = () => {
|
|
7
|
+
const [, t] = useLanguage()
|
|
8
|
+
const theme = useTheme()
|
|
9
|
+
|
|
10
|
+
const appInfo = {
|
|
11
|
+
title: t('ORDERING_SELF_KIOSK', 'Ordering Self Ordering Kiosk'),
|
|
12
|
+
description: t('KIOS_DESCRIPTION', 'This tool will help your store complete that final step on each sale with innovative and intuitive software and hardware inside your locations.'),
|
|
13
|
+
images: {
|
|
14
|
+
live: theme.images.myProducts.myKioskAppLive,
|
|
15
|
+
brand: theme.images.myProducts.myKioskAppBrand
|
|
16
|
+
},
|
|
17
|
+
live_title: t('LIVE_DEMO', 'Live Demo'),
|
|
18
|
+
live_description: t('APP_LIVE_DEMO_DESCRIPTION', 'This is a branded Ordering.co product. play with it and understand how it works'),
|
|
19
|
+
apple_store_link: 'https://apps.apple.com/us/app/ordering-kiosk-2-0/id1609314960',
|
|
20
|
+
google_play_link: 'https://play.google.com/store/apps/details?id=com.ordering.orderingkioskv5&hl=en&gl=US',
|
|
21
|
+
brand_title: t('YOUR_BRANDED_KIOSK', 'Your Branded Kiosk'),
|
|
22
|
+
brand_description: t('KIOSK_BRANDED_DESCRIPTION', 'This App is delivered in less than five working days, fully branded with your guidelines, and ready to be used on any tablet you add it to.'),
|
|
23
|
+
purchase_link: 'https://www.ordering.co/ordering-sales'
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
return (
|
|
27
|
+
<AppLayout appInfo={appInfo} />
|
|
28
|
+
)
|
|
29
|
+
}
|