Skip to content

Commit d86e132

Browse files
authored
Merge pull request #122 from Bit-Apps-Pro/feat/wishlist-actions
Feature: Wishlist Member Actions added
2 parents f8df7c4 + 8ad0b11 commit d86e132

File tree

16 files changed

+1026
-3
lines changed

16 files changed

+1026
-3
lines changed

frontend-dev/src/Utils/StaticData/tutorialLinks.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -406,7 +406,7 @@ const tutorialLinks = {
406406
youTubeLink: 'https://www.youtube.com/playlist?list=PL7c6CDwwm-ALe76SC4ClrJItKDznTPUmv',
407407
docLink: 'https://bitapps.pro/docs/bit-integrations/actions/wp-courseware-integrations/'
408408
},
409-
wishlist: {
409+
wishlistMember: {
410410
youTubeLink: 'https://www.youtube.com/playlist?list=PL7c6CDwwm-AIsdIcLNYtPXJGnTZ_UmWvT',
411411
docLink: 'https://bitapps.pro/docs/bit-integrations/actions/wishlist-integrations/'
412412
},

frontend-dev/src/components/AllIntegrations/EditInteg.jsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,7 @@ const EditSmartSuite = lazy(() => import('./SmartSuite/EditSmartSuite'))
166166
const EditBento = lazy(() => import('./Bento/EditBento'))
167167
const EditLine = lazy(() => import('./Line/EditLine'))
168168
const EditACPT = lazy(() => import('./ACPT/EditACPT'))
169+
const EditWishlistMember = lazy(() => import('./WishlistMember/EditWishlistMember'))
169170

170171
const loaderStyle = {
171172
display: 'flex',
@@ -560,6 +561,8 @@ const IntegType = memo(({ allIntegURL, flow }) => {
560561
return <EditLine allIntegURL={allIntegURL} />
561562
case 'ACPT':
562563
return <EditACPT allIntegURL={allIntegURL} />
564+
case 'Wishlist Member':
565+
return <EditWishlistMember allIntegURL={allIntegURL} />
563566
default:
564567
return <Loader style={loaderStyle} />
565568
}

frontend-dev/src/components/AllIntegrations/IntegInfo.jsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,7 @@ const SmartSuiteAuthorization = lazy(() => import('./SmartSuite/SmartSuiteAuthor
167167
const BentoAuthorization = lazy(() => import('./Bento/BentoAuthorization'))
168168
const LineAuthorization = lazy(() => import('./Line/LineAuthorization'))
169169
const ACPTAuthorization = lazy(() => import('./ACPT/ACPTAuthorization'))
170+
const WishlistMemberAuthorization = lazy(() => import('./WishlistMember/WishlistMemberAuthorization'))
170171

171172
export default function IntegInfo() {
172173
const { id, type } = useParams()
@@ -589,6 +590,8 @@ export default function IntegInfo() {
589590
return <LineAuthorization lineConf={integrationConf} step={1} isInfo />
590591
case 'ACPT':
591592
return <ACPTAuthorization acptConf={integrationConf} step={1} isInfo />
593+
case 'WishlistMember':
594+
return <WishlistMemberAuthorization wishlistMemberConf={integrationConf} step={1} isInfo />
592595
default:
593596
return <></>
594597
}

frontend-dev/src/components/AllIntegrations/Log.jsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -222,7 +222,9 @@ function Log({ allIntegURL }) {
222222
overflow: 'auto',
223223
maxWidth: '800px',
224224
maxHeight: '500px',
225-
boxShadow: '0 2px 8px rgba(0,0,0,0.15)'
225+
boxShadow: '0 2px 8px rgba(0,0,0,0.15)',
226+
width: '100%',
227+
height: '100%'
226228
}}>
227229
<pre style={{ margin: 0 }}>
228230
<code className="">{jsonPrint(response)}</code>

frontend-dev/src/components/AllIntegrations/NewInteg.jsx

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,7 @@ const SmartSuite = lazy(() => import('./SmartSuite/SmartSuite'))
165165
const Bento = lazy(() => import('./Bento/Bento'))
166166
const Line = lazy(() => import('./Line/Line'))
167167
const ACPT = lazy(() => import('./ACPT/ACPT'))
168+
const WishlistMember = lazy(() => import('./WishlistMember/WishlistMember'))
168169

169170
export default function NewInteg({ allIntegURL }) {
170171
const { integUrlName } = useParams()
@@ -173,6 +174,7 @@ export default function NewInteg({ allIntegURL }) {
173174
if (!window.opener && !Object.keys(flow).length) {
174175
navigate('/flow/new')
175176
}
177+
176178
const NewIntegs = () => {
177179
switch (integUrlName) {
178180
case 'Zoho CRM':
@@ -1581,6 +1583,15 @@ export default function NewInteg({ allIntegURL }) {
15811583
setFlow={setFlow}
15821584
/>
15831585
)
1586+
case 'Wishlist Member':
1587+
return (
1588+
<WishlistMember
1589+
allIntegURL={allIntegURL}
1590+
formFields={flow?.triggerData?.fields}
1591+
flow={flow}
1592+
setFlow={setFlow}
1593+
/>
1594+
)
15841595
default:
15851596
return <></>
15861597
}
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
/* eslint-disable no-param-reassign */
2+
3+
import { useState } from 'react'
4+
import { useNavigate, useParams } from 'react-router-dom'
5+
import { useRecoilState, useRecoilValue } from 'recoil'
6+
import { $actionConf, $formFields, $newFlow } from '../../../GlobalStates'
7+
import { __ } from '../../../Utils/i18nwrap'
8+
import SnackMsg from '../../Utilities/SnackMsg'
9+
import { saveActionConf } from '../IntegrationHelpers/IntegrationHelpers'
10+
import IntegrationStepThree from '../IntegrationHelpers/IntegrationStepThree'
11+
import SetEditIntegComponents from '../IntegrationHelpers/SetEditIntegComponents'
12+
import { checkValidation, setIntegrationName } from './WishlistMemberCommonFunc'
13+
import WishlistMemberIntegLayout from './WishlistMemberIntegLayout'
14+
15+
function EditWishlistMember({ allIntegURL }) {
16+
const navigate = useNavigate()
17+
const { formID } = useParams()
18+
19+
const [wishlistMemberConf, setWishlistMemberConf] = useRecoilState($actionConf)
20+
const [flow, setFlow] = useRecoilState($newFlow)
21+
const formFields = useRecoilValue($formFields)
22+
const [isLoading, setIsLoading] = useState(false)
23+
const [snack, setSnackbar] = useState({ show: false })
24+
const [name, setName] = useState(wishlistMemberConf?.name || '')
25+
26+
const saveConfig = () => {
27+
if (checkValidation(wishlistMemberConf)) {
28+
setSnackbar({
29+
show: true,
30+
msg: __('Please map all required fields to continue.', 'bit-integrations')
31+
})
32+
33+
return
34+
}
35+
36+
saveActionConf({
37+
flow,
38+
setFlow,
39+
allIntegURL,
40+
conf: wishlistMemberConf,
41+
navigate,
42+
edit: 1,
43+
setIsLoading,
44+
setSnackbar
45+
})
46+
}
47+
48+
return (
49+
<div style={{ width: 900 }}>
50+
<SnackMsg snack={snack} setSnackbar={setSnackbar} />
51+
52+
<div className="flx mt-3">
53+
<b className="wdt-200 d-in-b">{__('Integration Name:', 'bit-integrations')}</b>
54+
<input
55+
className="btcd-paper-inp w-5"
56+
onChange={e => {
57+
setName(e.target.value)
58+
setIntegrationName(e, setWishlistMemberConf)
59+
}}
60+
name="name"
61+
value={name}
62+
type="text"
63+
placeholder={__('Integration Name...', 'bit-integrations')}
64+
/>
65+
</div>
66+
<br />
67+
68+
<SetEditIntegComponents entity={flow.triggered_entity} setSnackbar={setSnackbar} />
69+
<WishlistMemberIntegLayout
70+
formID={formID}
71+
formFields={formFields}
72+
wishlistMemberConf={wishlistMemberConf}
73+
setWishlistMemberConf={setWishlistMemberConf}
74+
isLoading={isLoading}
75+
step={2}
76+
setIsLoading={setIsLoading}
77+
setSnackbar={setSnackbar}
78+
/>
79+
80+
<IntegrationStepThree
81+
edit
82+
saveConfig={saveConfig}
83+
disabled={checkValidation(wishlistMemberConf)}
84+
isLoading={isLoading}
85+
dataConf={wishlistMemberConf}
86+
setDataConf={setWishlistMemberConf}
87+
formFields={formFields}
88+
/>
89+
<br />
90+
</div>
91+
)
92+
}
93+
94+
export default EditWishlistMember
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
import { useState } from 'react'
2+
import 'react-multiple-select-dropdown-lite/dist/index.css'
3+
import { useNavigate } from 'react-router-dom'
4+
import BackIcn from '../../../Icons/BackIcn'
5+
import { __ } from '../../../Utils/i18nwrap'
6+
import SnackMsg from '../../Utilities/SnackMsg'
7+
import Steps from '../../Utilities/Steps'
8+
import { saveIntegConfig } from '../IntegrationHelpers/IntegrationHelpers'
9+
import IntegrationStepThree from '../IntegrationHelpers/IntegrationStepThree'
10+
import WishlistMemberAuthorization from './WishlistMemberAuthorization'
11+
import { checkValidation } from './WishlistMemberCommonFunc'
12+
import WishlistMemberIntegLayout from './WishlistMemberIntegLayout'
13+
14+
export default function WishlistMember({ formFields, setFlow, flow, allIntegURL }) {
15+
const navigate = useNavigate()
16+
const [isLoading, setIsLoading] = useState(false)
17+
const [step, setStep] = useState(1)
18+
const [snack, setSnackbar] = useState({ show: false })
19+
const [wishlistMemberConf, setWishlistMemberConf] = useState({
20+
name: 'Wishlist Member',
21+
type: 'Wishlist Member',
22+
field_map: [{ formField: '', wishlistMemberField: '' }],
23+
wishlistFields: [],
24+
action: ''
25+
})
26+
27+
const nextPage = val => {
28+
setTimeout(() => {
29+
document.getElementById('btcd-settings-wrp').scrollTop = 0
30+
}, 300)
31+
32+
if (val === 3 && checkValidation(wishlistMemberConf)) {
33+
setSnackbar({
34+
show: true,
35+
msg: __('Please map all required fields to continue.', 'bit-integrations')
36+
})
37+
38+
return
39+
}
40+
41+
setStep(val)
42+
}
43+
44+
return (
45+
<div>
46+
<SnackMsg snack={snack} setSnackbar={setSnackbar} />
47+
<div className="txt-center mt-2">
48+
<Steps step={3} active={step} />
49+
</div>
50+
51+
{/* STEP 1 */}
52+
<WishlistMemberAuthorization
53+
wishlistMemberConf={wishlistMemberConf}
54+
setWishlistMemberConf={setWishlistMemberConf}
55+
step={step}
56+
nextPage={nextPage}
57+
isLoading={isLoading}
58+
setIsLoading={setIsLoading}
59+
setSnackbar={setSnackbar}
60+
/>
61+
62+
{/* STEP 2 */}
63+
<div
64+
className="btcd-stp-page"
65+
style={{
66+
...(step === 2 && { width: 900, minHeight: '600px', height: 'auto', overflow: 'visible' })
67+
}}>
68+
<WishlistMemberIntegLayout
69+
formFields={formFields}
70+
wishlistMemberConf={wishlistMemberConf}
71+
setWishlistMemberConf={setWishlistMemberConf}
72+
setSnackbar={setSnackbar}
73+
setIsLoading={setIsLoading}
74+
/>
75+
<br />
76+
<br />
77+
<br />
78+
<button
79+
onClick={() => nextPage(3)}
80+
disabled={checkValidation(wishlistMemberConf)}
81+
className="btn f-right btcd-btn-lg purple sh-sm flx"
82+
type="button">
83+
{__('Next', 'bit-integrations')}
84+
<BackIcn className="ml-1 rev-icn" />
85+
</button>
86+
</div>
87+
88+
{/* STEP 3 */}
89+
<IntegrationStepThree
90+
step={step}
91+
saveConfig={() =>
92+
saveIntegConfig(flow, setFlow, allIntegURL, wishlistMemberConf, navigate, '', '', setIsLoading)
93+
}
94+
isLoading={isLoading}
95+
dataConf={wishlistMemberConf}
96+
setDataConf={setWishlistMemberConf}
97+
formFields={formFields}
98+
/>
99+
</div>
100+
)
101+
}
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
import { useState } from 'react'
2+
import BackIcn from '../../../Icons/BackIcn'
3+
import { __ } from '../../../Utils/i18nwrap'
4+
import tutorialLinks from '../../../Utils/StaticData/tutorialLinks'
5+
import LoaderSm from '../../Loaders/LoaderSm'
6+
import TutorialLink from '../../Utilities/TutorialLink'
7+
import { handleAuthorize, setIntegrationName } from './WishlistMemberCommonFunc'
8+
9+
export default function WishlistMemberAuthorization({
10+
wishlistMemberConf,
11+
setWishlistMemberConf,
12+
step,
13+
nextPage,
14+
setSnackbar,
15+
isInfo
16+
}) {
17+
const [isAuthorized, setIsAuthorized] = useState(false)
18+
const [isLoading, setIsLoading] = useState(false)
19+
const { wishlistMember } = tutorialLinks
20+
21+
return (
22+
<div
23+
className="btcd-stp-page"
24+
style={{ ...{ width: step === 1 && 900 }, ...{ height: step === 1 && 'auto' } }}>
25+
{wishlistMember?.youTubeLink && (
26+
<TutorialLink title="WishlistMember" youTubeLink={wishlistMember?.youTubeLink} />
27+
)}
28+
{wishlistMember?.docLink && (
29+
<TutorialLink title="WishlistMember" docLink={wishlistMember?.docLink} />
30+
)}
31+
32+
<div className="mt-3">
33+
<b>{__('Integration Name:', 'bit-integrations')}</b>
34+
</div>
35+
<input
36+
className="btcd-paper-inp w-7 mt-1"
37+
onChange={e => setIntegrationName(e, setWishlistMemberConf)}
38+
name="name"
39+
value={wishlistMemberConf.name}
40+
type="text"
41+
placeholder={__('Integration Name...', 'bit-integrations')}
42+
disabled={isInfo}
43+
/>
44+
45+
<button
46+
onClick={() => handleAuthorize(setIsAuthorized, setIsLoading, setSnackbar)}
47+
className="btn btcd-btn-lg purple sh-sm flx"
48+
type="button"
49+
disabled={isAuthorized || isLoading}>
50+
{isAuthorized ? __('Authorized ✔', 'bit-integrations') : __('Authorize', 'bit-integrations')}
51+
{isLoading && <LoaderSm size={20} clr="#022217" className="ml-2" />}
52+
</button>
53+
54+
<br />
55+
<button
56+
onClick={() => nextPage(2)}
57+
className="btn f-right btcd-btn-lg purple sh-sm flx"
58+
type="button"
59+
disabled={!isAuthorized}>
60+
{__('Next', 'bit-integrations')}
61+
<BackIcn className="ml-1 rev-icn" />
62+
</button>
63+
</div>
64+
)
65+
}

0 commit comments

Comments
 (0)