@riosst100/pwa-marketplace 1.4.6 → 1.4.8

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.
Files changed (47) hide show
  1. package/i18n/en_US.json +509 -509
  2. package/i18n/id_ID.json +29 -29
  3. package/package.json +1 -1
  4. package/src/componentOverrideMapping.js +3 -0
  5. package/src/components/BrandLandingPage/brandInfo.js +93 -0
  6. package/src/components/BrandLandingPage/brandLanding.js +255 -0
  7. package/src/components/BrandLandingPage/index.js +94 -0
  8. package/src/components/BrandLandingPage/menu.js +20 -0
  9. package/src/components/BrandListPage/banner_brands.png +0 -0
  10. package/src/components/BrandListPage/brandList.js +88 -0
  11. package/src/components/BrandListPage/index.js +57 -0
  12. package/src/components/BrandSlider/brandSlider.js +2 -2
  13. package/src/components/BrandSlider/item.js +24 -6
  14. package/src/components/CollectibleGameSets/collectibleGameSets.js +2 -1
  15. package/src/components/FilterTop/CustomFilters/customFilters.js +9 -7
  16. package/src/components/FilterTop/filterTop.js +2 -128
  17. package/src/components/Modal/index.js +10 -0
  18. package/src/components/Modal/modal.js +48 -0
  19. package/src/components/ProductLineSlider/index.js +1 -0
  20. package/src/components/ProductLineSlider/item.js +38 -0
  21. package/src/components/ProductLineSlider/logo_nendoroid.png +0 -0
  22. package/src/components/ProductLineSlider/nendroid-image.png +0 -0
  23. package/src/components/ProductLineSlider/productLineSlider.js +91 -0
  24. package/src/components/SocialMediaShare/index.js +51 -0
  25. package/src/components/SocialMediaShare/share.js +94 -0
  26. package/src/intercept.js +41 -27
  27. package/src/overwrites/venia-ui/lib/components/FilterModal/CurrentFilters/currentFilter.js +1 -1
  28. package/src/overwrites/venia-ui/lib/components/FilterModal/CurrentFilters/currentFilter.module.css +5 -4
  29. package/src/overwrites/venia-ui/lib/components/FilterModal/CurrentFilters/currentFilters.module.css +3 -1
  30. package/src/overwrites/venia-ui/lib/components/Footer/footer.js +147 -0
  31. package/src/overwrites/venia-ui/lib/components/Footer/footer.module.css +70 -0
  32. package/src/overwrites/venia-ui/lib/components/Footer/index.js +1 -0
  33. package/src/overwrites/venia-ui/lib/components/Footer/sampleData.js +48 -0
  34. package/src/overwrites/venia-ui/lib/components/Gallery/gallery.module.css +1 -1
  35. package/src/overwrites/venia-ui/lib/components/Main/index.js +1 -0
  36. package/src/overwrites/venia-ui/lib/components/Main/main.js +39 -0
  37. package/src/overwrites/venia-ui/lib/components/Main/main.module.css +41 -0
  38. package/src/overwrites/venia-ui/lib/components/MegaMenu/submenuColumn.js +14 -4
  39. package/src/overwrites/venia-ui/lib/components/MegaMenu/submenuColumn.module.css +2 -2
  40. package/src/overwrites/venia-ui/lib/components/Newsletter/index.js +1 -0
  41. package/src/overwrites/venia-ui/lib/components/Newsletter/newsletter.js +156 -0
  42. package/src/overwrites/venia-ui/lib/components/Newsletter/newsletter.module.css +90 -0
  43. package/src/overwrites/venia-ui/lib/components/Newsletter/newsletter.shimmer.js +46 -0
  44. package/src/overwrites/venia-ui/lib/components/Newsletter/newsletter.shimmer.module.css +21 -0
  45. package/src/overwrites/venia-ui/lib/components/ProductFullDetail/productFullDetail.js +23 -12
  46. package/src/overwrites/venia-ui/lib/components/TextInput/textInput.js +9 -1
  47. package/src/theme/vars.js +2 -0
@@ -0,0 +1,156 @@
1
+ import React, { useEffect } from 'react';
2
+ import { FormattedMessage, useIntl } from 'react-intl';
3
+ import { Form } from 'informed';
4
+ import { shape, string } from 'prop-types';
5
+
6
+ import { useNewsletter } from '@magento/peregrine/lib/talons/Newsletter/useNewsletter';
7
+ import { useToasts } from '@magento/peregrine';
8
+
9
+ import { isRequired } from '@magento/venia-ui/lib/util/formValidators';
10
+ import { useStyle } from '@magento/venia-ui/lib/classify';
11
+ import FormError from '@magento/venia-ui/lib/components/FormError';
12
+ import Button from '@magento/venia-ui/lib/components/Button';
13
+ import Field from '@magento/venia-ui/lib/components/Field';
14
+ import LoadingIndicator from '@magento/venia-ui/lib/components/LoadingIndicator';
15
+ import TextInput from '@magento/venia-ui/lib/components/TextInput';
16
+ import LinkButton from '@magento/venia-ui/lib/components/LinkButton';
17
+ import Shimmer from './newsletter.shimmer';
18
+ import defaultClasses from './newsletter.module.css';
19
+
20
+ const Newsletter = props => {
21
+ const { formatMessage } = useIntl();
22
+ const classes = useStyle(defaultClasses, props.classes);
23
+ const talonProps = useNewsletter();
24
+ const [, { addToast }] = useToasts();
25
+ const {
26
+ isEnabled,
27
+ errors,
28
+ handleSubmit,
29
+ isBusy,
30
+ isLoading,
31
+ setFormApi,
32
+ newsLetterResponse,
33
+ clearErrors
34
+ } = talonProps;
35
+
36
+ useEffect(() => {
37
+ if (newsLetterResponse && newsLetterResponse.status) {
38
+ addToast({
39
+ type: 'success',
40
+ message: formatMessage({
41
+ id: 'newsletter.subscribeMessage',
42
+ defaultMessage: 'The email address is subscribed.'
43
+ }),
44
+ timeout: 5000
45
+ });
46
+ }
47
+ }, [addToast, formatMessage, newsLetterResponse]);
48
+
49
+ if (isLoading) {
50
+ return <Shimmer />;
51
+ }
52
+
53
+ if (!isEnabled) {
54
+ return null;
55
+ }
56
+
57
+ const maybeLoadingIndicator = isBusy ? (
58
+ <div className={classes.loadingContainer}>
59
+ <LoadingIndicator>
60
+ <FormattedMessage
61
+ id={'newsletter.loadingText'}
62
+ defaultMessage={'Subscribing'}
63
+ />
64
+ </LoadingIndicator>
65
+ </div>
66
+ ) : null;
67
+
68
+ return (
69
+ <div className={classes.root} data-cy={'Newsletter-root'}>
70
+ {maybeLoadingIndicator}
71
+ <span data-cy="Newsletter-title" className={classes.title}>
72
+ <FormattedMessage
73
+ id={'newsletter.titleText'}
74
+ defaultMessage={'Subscribe'}
75
+ />
76
+ </span>
77
+
78
+ <p
79
+ data-cy="Newsletter-infoText"
80
+ className={classes.newsletter_text}
81
+ >
82
+ <FormattedMessage
83
+ id={'newsletter.infoText'}
84
+ defaultMessage={
85
+ 'By subscribing you agree to receive email from us. \n Please read our Privacy Policy'
86
+ }
87
+ />
88
+ </p>
89
+ <FormError
90
+ allowErrorMessages
91
+ errors={Array.from(errors.values())}
92
+ />
93
+ <Form
94
+ getApi={setFormApi}
95
+ className={classes.form}
96
+ onSubmit={handleSubmit}
97
+ >
98
+ <Field
99
+ id="email"
100
+ label={formatMessage({
101
+ id: 'global.email',
102
+ defaultMessage: 'Email'
103
+ })}
104
+ >
105
+ <TextInput
106
+ autoComplete="email"
107
+ field="email"
108
+ id="email"
109
+ placeholder="Email Address"
110
+ validate={isRequired}
111
+ className={{
112
+ inputClassName: "!border-b-2 !border-t-0 !border-l-0 !border-r-0 rounded-none !px-0"
113
+ }}
114
+ />
115
+ </Field>
116
+ <LinkButton
117
+ data-cy="Newsletter-submitButton"
118
+ className={classes.subscribe_link}
119
+ type="submit"
120
+ disabled={isBusy}
121
+ onClick={clearErrors}
122
+ >
123
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
124
+ <path d="M20.5 13.01L15.49 7.98999" stroke="#292D32" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round" />
125
+ <path d="M3.5 13.01H20.5" stroke="#292D32" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round" />
126
+ </svg>
127
+ </LinkButton>
128
+ <div className={classes.buttonsContainer}>
129
+ <Button
130
+ priority="normal"
131
+ type="submit"
132
+ disabled={isBusy}
133
+ onClick={clearErrors}
134
+ >
135
+ <FormattedMessage
136
+ id={'newsletter.subscribeText'}
137
+ defaultMessage={'Subscribe'}
138
+ />
139
+ </Button>
140
+ </div>
141
+ </Form>
142
+ </div>
143
+ );
144
+ };
145
+
146
+ Newsletter.propTypes = {
147
+ classes: shape({
148
+ modal_active: string,
149
+ root: string,
150
+ title: string,
151
+ form: string,
152
+ buttonsContainer: string
153
+ })
154
+ };
155
+
156
+ export default Newsletter;
@@ -0,0 +1,90 @@
1
+ .root {
2
+ composes: col-span-6 from global;
3
+ composes: gap-none from global;
4
+ composes: grid from global;
5
+ composes: items-start from global;
6
+ composes: max-w-[20rem] from global;
7
+ composes: mx-auto from global;
8
+ composes: relative from global;
9
+
10
+ composes: sm_col-span-3 from global;
11
+ }
12
+
13
+ .form {
14
+ composes: gap-y-xs from global;
15
+ composes: grid from global;
16
+ composes: relative from global;
17
+ }
18
+
19
+ /* TODO @TW: cannot compose */
20
+ .form input {
21
+ /* TODO @TW: review */
22
+ padding-right: calc(1.875rem * var(--iconsAfter) + 5.625rem);
23
+ }
24
+
25
+ @media (max-width: 799px) {
26
+
27
+ /* TODO @TW: cannot compose */
28
+ .form input {
29
+ /* TODO @TW: review */
30
+ padding-right: calc(1.875rem * var(--iconsAfter) + 0.625rem);
31
+ }
32
+ }
33
+
34
+ /* TODO @TW: cannot compose */
35
+ .form label {
36
+ position: absolute;
37
+ z-index: -1;
38
+ /* composes: z-behind from global; */
39
+ }
40
+
41
+ .buttonsContainer {
42
+ composes: gap-sm from global;
43
+ composes: grid from global;
44
+ composes: grid-flow-row from global;
45
+ composes: justify-center from global;
46
+ composes: mt-xs from global;
47
+ composes: w-full from global;
48
+
49
+ composes: md_hidden from global;
50
+ }
51
+
52
+ .title {
53
+ composes: block from global;
54
+ composes: font-semibold from global;
55
+ composes: mb-xs from global;
56
+ composes: text-colorDefault from global;
57
+ composes: text-sm from global;
58
+ }
59
+
60
+ .subscribe_link {
61
+ composes: absolute from global;
62
+ composes: bg-white from global;
63
+ composes: hidden from global;
64
+ composes: max-h-[35px] from global;
65
+ composes: px-0 from global;
66
+ composes: py-0 from global;
67
+ composes: right-1 from global;
68
+ composes: text-colorDefault from global;
69
+ composes: top-0 from global;
70
+ composes: underline from global;
71
+ min-height: 35px;
72
+ transform: translateY(7%);
73
+
74
+ composes: md_inline-block from global;
75
+ }
76
+
77
+ .newsletter_text {
78
+ composes: mb-sm from global;
79
+ }
80
+
81
+ .loadingContainer {
82
+ composes: absolute from global;
83
+ composes: bg-white from global;
84
+ composes: h-full from global;
85
+ composes: left-0 from global;
86
+ composes: opacity-75 from global;
87
+ composes: top-0 from global;
88
+ composes: w-full from global;
89
+ composes: z-mask from global;
90
+ }
@@ -0,0 +1,46 @@
1
+ import React from 'react';
2
+
3
+ import { useStyle } from '@magento/venia-ui/lib/classify';
4
+ import Shimmer from '@magento/venia-ui/lib/components/Shimmer';
5
+ import defaultClasses from './newsletter.module.css';
6
+ import defaultShimmerClasses from './newsletter.shimmer.module.css';
7
+
8
+ const NewsletterShimmer = props => {
9
+ const classes = useStyle(
10
+ defaultClasses,
11
+ defaultShimmerClasses,
12
+ props.classes
13
+ );
14
+
15
+ return (
16
+ <div className={classes.root}>
17
+ <Shimmer
18
+ key="title"
19
+ classes={{
20
+ root_rectangle: classes.shimmerItem
21
+ }}
22
+ />
23
+ <Shimmer
24
+ key="text"
25
+ classes={{
26
+ root_rectangle: classes.shimmerParagraphLine
27
+ }}
28
+ />
29
+ <Shimmer
30
+ key="text2"
31
+ width="50%"
32
+ classes={{
33
+ root_rectangle: classes.shimmerItem
34
+ }}
35
+ />
36
+ <div className={classes.form}>
37
+ <Shimmer type="textInput" />
38
+ <div className={classes.buttonsContainer}>
39
+ <Shimmer type="button" />
40
+ </div>
41
+ </div>
42
+ </div>
43
+ );
44
+ };
45
+
46
+ export default NewsletterShimmer;
@@ -0,0 +1,21 @@
1
+ .shimmerItem {
2
+ min-height: 1rem;
3
+ composes: bg-gray-100 from global;
4
+ composes: inline-block from global;
5
+ composes: overflow-hidden from global;
6
+ composes: pointer-events-none from global;
7
+ composes: relative from global;
8
+ display: block;
9
+ margin-bottom: 1rem;
10
+ }
11
+
12
+ .shimmerParagraphLine {
13
+ min-height: 1rem;
14
+ composes: bg-gray-100 from global;
15
+ composes: inline-block from global;
16
+ composes: overflow-hidden from global;
17
+ composes: pointer-events-none from global;
18
+ composes: relative from global;
19
+ display: block;
20
+ margin-bottom: 0.5rem;
21
+ }
@@ -24,12 +24,12 @@ import Tabs from '@riosst100/pwa-marketplace/src/components/commons/Tabs';
24
24
  import ProductReviews from './components/productReview';
25
25
  import RichText from '@magento/venia-ui/lib/components/RichText';
26
26
  import { Star1, Verify, Sms, Message, Shop } from 'iconsax-react';
27
- import { Link } from 'react-router-dom';
28
- import resourceUrl from '@magento/peregrine/lib/util/makeUrl';
27
+ import { Link } from "react-router-dom";
29
28
  import Divider from '@riosst100/pwa-marketplace/src/components/Divider';
30
29
 
31
30
  const WishlistButton = React.lazy(() => import('@magento/venia-ui/lib/components/Wishlist/AddToListButton'));
32
31
  const Options = React.lazy(() => import('@magento/venia-ui/lib/components/ProductOptions'));
32
+ import Share from '@riosst100/pwa-marketplace/src/components/SocialMediaShare';
33
33
 
34
34
  // Correlate a GQL error message to a field. GQL could return a longer error
35
35
  // string but it may contain contextual info such as product id. We can use
@@ -390,10 +390,21 @@ const ProductFullDetail = props => {
390
390
  >
391
391
  <section className={classes.leftContainer}>
392
392
  <Carousel images={mediaGalleryEntries} />
393
- <div className='product_group-actions'>
393
+ <div className='product_group-actions flex gap-x-[18px] gap-y-4 justify-center items-center'>
394
394
  <Suspense fallback={null}>
395
- <WishlistButton {...wishlistButtonProps} />
395
+ <WishlistButton
396
+ classes={{
397
+ root: cn(
398
+ 'button_share border border-solid border-gray-100 p-2.5',
399
+ 'rounded-full flex justify-center items-center h-fitContent min-w-min'
400
+ )
401
+ }}
402
+ {...wishlistButtonProps}
403
+ buttonText={''}
404
+ />
396
405
  </Suspense>
406
+ <Divider className="w-[1px] !h-[40px]" />
407
+ <Share />
397
408
  </div>
398
409
  </section>
399
410
  <section className={classes.rightContainer}>
@@ -489,9 +500,9 @@ const ProductFullDetail = props => {
489
500
 
490
501
  <div className='product_shipping-information mb-[30px] leading-[18px] mt-[25px]'>
491
502
  {sellerDetails &&
492
- <div className='text-xs'>
493
- Ship From <span className='font-semibold'>{sellerDetails.country}</span>
494
- </div>}
503
+ <div className='text-xs'>
504
+ Ship From <span className='font-semibold'>{sellerDetails.country}</span>
505
+ </div>}
495
506
  <div className='text-xs'>
496
507
  Ship To <span className='font-semibold'>Yishun</span>
497
508
  </div>
@@ -552,23 +563,23 @@ const ProductFullDetail = props => {
552
563
  </div>
553
564
  </div>
554
565
  <div className='flex flex-wrap items-start gap-4 relative'>
555
- <button class="flex items-center justify-center gap-[5px] py-1 px-5 relative bg-white rounded-[30px] border border-solid border-[#6243fa]">
566
+ <Link to='/' class="flex items-center justify-center gap-[5px] py-1 px-5 relative bg-white rounded-[30px] border border-solid border-[#6243fa]">
556
567
  <div class="flex items-center justify-center gap-[10px] relative">
557
568
  <Sms color="#6243FA" size={14} variant="Outline" className='stroke-[#6243FA]' />
558
569
  <div class="relative xs_hidden lg_flex w-fit font-medium text-[#6243fa] text-[14px] tracking-[0] leading-[20px] whitespace-nowrap">
559
570
  Message
560
571
  </div>
561
572
  </div>
562
- </button>
563
- <button class="flex items-center justify-center gap-[5px] py-1 px-5 relative bg-[#280135] rounded-[30px] border border-solid border-[#280135]">
573
+ </Link>
574
+ <Link to='/' class="flex items-center justify-center gap-[5px] py-1 px-5 relative bg-[#280135] rounded-[30px] border border-solid border-[#280135]">
564
575
  <div class="flex items-center justify-center gap-[10px] relative">
565
576
  <Message color='#FFFFFF' size={14} variant="Outline" className='stroke-[#FFFFFF]' />
566
577
  <div class="relative xs_hidden lg_flex w-fit font-medium text-[#fff] text-[14px] tracking-[0] leading-[20px] whitespace-nowrap">
567
578
  Chat With Seller
568
579
  </div>
569
580
  </div>
570
- </button>
571
- <Link to={`/seller/${sellerDetails.url_key}`} class="flex items-center justify-center gap-[5px] py-1 px-5 relative bg-white rounded-[30px] border border-solid border-[#6243fa]">
581
+ </Link>
582
+ <Link class="flex items-center justify-center gap-[5px] py-1 px-5 relative bg-white rounded-[30px] border border-solid border-[#6243fa]">
572
583
  <div class="flex items-center justify-center gap-[10px] relative">
573
584
  <Shop color="#6243FA" size={14} variant="Outline" className='stroke-[#6243FA]' />
574
585
  <div class="relative xs_hidden lg_flex w-fit font-medium text-[#6243fa] text-[14px] tracking-[0] leading-[20px] whitespace-nowrap">
@@ -28,7 +28,15 @@ const TextInput = props => {
28
28
  return (
29
29
  <Fragment>
30
30
  <FieldIcons after={after} before={before} >
31
- <InformedText {...rest} className={cn(inputClass, inputClassName)} field={field} />
31
+ <InformedText
32
+ {...rest}
33
+ className={cn(
34
+ inputClass,
35
+ 'focus_shadow-none',
36
+ inputClassName
37
+ )}
38
+ field={field}
39
+ />
32
40
  </FieldIcons>
33
41
  <Message fieldState={fieldState}>{message}</Message>
34
42
  </Fragment>
package/src/theme/vars.js CHANGED
@@ -7,6 +7,7 @@ export const gray100 = '#B9AEC5';
7
7
  export const gray600 = '#1BA387';
8
8
  export const gray700 = '#999999';
9
9
  export const primary900 = "#292D32";
10
+ export const blackTransparent = "#11182780";
10
11
 
11
12
  export default {
12
13
  textPrimary,
@@ -18,4 +19,5 @@ export default {
18
19
  gray600,
19
20
  gray700,
20
21
  primary900,
22
+ blackTransparent,
21
23
  }