@treely/strapi-slices 5.15.0 → 5.16.0

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 (65) hide show
  1. package/README.md +6 -0
  2. package/dist/components/CreditsAvailableBadge/CreditsAvailableBadge.d.ts +2 -2
  3. package/dist/models/PortfolioProject.d.ts +0 -2
  4. package/dist/models/fpm/FPMProject.d.ts +7 -0
  5. package/dist/models/strapi/StrapiProject.d.ts +0 -2
  6. package/dist/rootMessages.de.d.ts +0 -4
  7. package/dist/rootMessages.en.d.ts +0 -4
  8. package/dist/slices/ProjectGridCard/ProjectGridCard.d.ts +6 -0
  9. package/dist/slices/ProjectGridCard/index.d.ts +2 -0
  10. package/dist/slices/ProjectsGrid/ProjectsGrid.d.ts +3 -1
  11. package/dist/slices/ProjectsMap/MapMarker.d.ts +3 -3
  12. package/dist/strapi-slices.cjs.development.js +172 -161
  13. package/dist/strapi-slices.cjs.development.js.map +1 -1
  14. package/dist/strapi-slices.cjs.production.min.js +1 -1
  15. package/dist/strapi-slices.cjs.production.min.js.map +1 -1
  16. package/dist/strapi-slices.esm.js +175 -164
  17. package/dist/strapi-slices.esm.js.map +1 -1
  18. package/dist/test/integrationMocks/fpmPortoflioProjectMock.d.ts +3 -0
  19. package/dist/utils/getMessages.d.ts +0 -8
  20. package/package.json +1 -1
  21. package/src/components/CreditsAvailableBadge/CreditsAvailableBadge.test.tsx +8 -6
  22. package/src/components/CreditsAvailableBadge/CreditsAvailableBadge.tsx +34 -22
  23. package/src/components/CreditsAvailableBadge/messages.de.ts +1 -1
  24. package/src/components/portfolio/ProjectInfo/ProjectInfo.tsx +3 -7
  25. package/src/integrations/fpmClient.ts +7 -1
  26. package/src/integrations/strapi/getPortfolioProjects.test.ts +2 -2
  27. package/src/integrations/strapi/getPortfolioProjects.ts +4 -7
  28. package/src/integrations/strapi/getStaticPropsFromStrapi.ts +2 -1
  29. package/src/integrations/strapi/getStrapiCollectionType.ts +2 -1
  30. package/src/integrations/strapi/getStrapiSingleType.ts +3 -1
  31. package/src/integrations/strapi/strapiClient.ts +7 -1
  32. package/src/models/PortfolioProject.ts +0 -2
  33. package/src/models/fpm/FPMProject.ts +8 -0
  34. package/src/models/strapi/StrapiProject.ts +0 -2
  35. package/src/rootMessages.de.ts +0 -2
  36. package/src/rootMessages.en.ts +0 -2
  37. package/src/slices/ProjectFacts/ProjectFacts.stories.tsx +1 -2
  38. package/src/slices/ProjectGridCard/ProjectGridCard.test.tsx +54 -0
  39. package/src/slices/ProjectGridCard/ProjectGridCard.tsx +57 -0
  40. package/src/slices/ProjectGridCard/index.ts +3 -0
  41. package/src/slices/ProjectsGrid/ProjectsGrid.stories.tsx +1 -1
  42. package/src/slices/ProjectsGrid/ProjectsGrid.test.tsx +0 -2
  43. package/src/slices/ProjectsGrid/ProjectsGrid.tsx +5 -3
  44. package/src/slices/ProjectsMap/MapMarker.test.tsx +3 -2
  45. package/src/slices/ProjectsMap/MapMarker.tsx +9 -12
  46. package/src/slices/ProjectsMap/ProjectsMap.stories.tsx +0 -2
  47. package/src/slices/ProjectsMap/ProjectsMap.tsx +1 -1
  48. package/src/slices/TextWithCard/TextWithCard.stories.tsx +2 -3
  49. package/src/slices/TextWithCard/TextWithCard.tsx +2 -2
  50. package/src/test/integrationMocks/fpmPortoflioProjectMock.ts +16 -0
  51. package/src/test/integrationMocks/fpmProjectMock.ts +2 -1
  52. package/src/test/integrationMocks/portfolioProjectMock.ts +1 -3
  53. package/src/test/mocks/portfolioProjectMock.ts +0 -2
  54. package/src/test/strapiMocks/strapiProject.ts +0 -2
  55. package/dist/components/portfolio/PortfolioProjectCard/PortfolioProjectCard.d.ts +0 -6
  56. package/dist/components/portfolio/PortfolioProjectCard/index.d.ts +0 -2
  57. package/dist/components/portfolio/PortfolioProjectCard/messages.de.d.ts +0 -7
  58. package/dist/components/portfolio/PortfolioProjectCard/messages.en.d.ts +0 -7
  59. package/dist/models/CreditsAvailableState.d.ts +0 -7
  60. package/src/components/portfolio/PortfolioProjectCard/PortfolioProjectCard.test.tsx +0 -53
  61. package/src/components/portfolio/PortfolioProjectCard/PortfolioProjectCard.tsx +0 -69
  62. package/src/components/portfolio/PortfolioProjectCard/index.ts +0 -3
  63. package/src/components/portfolio/PortfolioProjectCard/messages.de.ts +0 -8
  64. package/src/components/portfolio/PortfolioProjectCard/messages.en.ts +0 -8
  65. package/src/models/CreditsAvailableState.ts +0 -8
@@ -5,6 +5,7 @@ import {
5
5
  Container,
6
6
  Flex,
7
7
  Heading,
8
+ Spacer,
8
9
  Text,
9
10
  useDisclosure,
10
11
  useToken,
@@ -12,8 +13,8 @@ import {
12
13
  import { MapPin } from '@phosphor-icons/react';
13
14
  import NextLink from 'next/link';
14
15
  import CreditsAvailableBadge from '../../components/CreditsAvailableBadge';
15
- import CreditsAvailableState from '../../models/CreditsAvailableState';
16
16
  import { IntlContext } from '../../components/ContextProvider';
17
+ import { CreditAvailability } from '../../models/fpm/FPMProject';
17
18
 
18
19
  export interface MapMarkerProps {
19
20
  title: string;
@@ -21,14 +22,14 @@ export interface MapMarkerProps {
21
22
  projectDeveloper?: string;
22
23
  slug?: string;
23
24
  portfolioHost?: string;
24
- creditsAvailable?: CreditsAvailableState;
25
+ creditAvailability: CreditAvailability;
25
26
  }
26
27
 
27
28
  const MapMarker = ({
28
29
  title,
29
30
  projectDeveloper,
30
31
  slug,
31
- creditsAvailable,
32
+ creditAvailability,
32
33
  portfolioHost = '',
33
34
  isPublic = false,
34
35
  }: MapMarkerProps) => {
@@ -65,15 +66,11 @@ const MapMarker = ({
65
66
  maxWidth={['3xs', null, null, 'sm']}
66
67
  >
67
68
  <Flex direction="column">
68
- {creditsAvailable && (
69
- <>
70
- <CreditsAvailableBadge
71
- status={creditsAvailable}
72
- href={slug && `${portfolioHost}/portfolio/${slug}`}
73
- />
74
- <Box height="3" />
75
- </>
76
- )}
69
+ <CreditsAvailableBadge
70
+ status={creditAvailability}
71
+ href={slug && `${portfolioHost}/portfolio/${slug}`}
72
+ />
73
+ <Spacer height="3" />
77
74
 
78
75
  <Heading size="md">{title}</Heading>
79
76
 
@@ -2,7 +2,6 @@ import React from 'react';
2
2
  import { StoryFn, Meta } from '@storybook/react';
3
3
 
4
4
  import fpmProjectMock from '../../test/integrationMocks/fpmProjectMock';
5
- import CreditsAvailableState from '../../models/CreditsAvailableState';
6
5
  import ProjectsMap from '.';
7
6
 
8
7
  export default {
@@ -91,7 +90,6 @@ FullProps.args = {
91
90
  {
92
91
  ...fpmProjectMock,
93
92
  slug: 'project-slug',
94
- creditsAvailable: CreditsAvailableState.YES,
95
93
  isPublic: true,
96
94
  geom: {
97
95
  type: 'Point',
@@ -99,7 +99,7 @@ export const ProjectsMap: React.FC<ProjectsMapProps> = ({
99
99
  isPublic={project.isPublic}
100
100
  portfolioHost={project.portfolioHost}
101
101
  slug={project.slug}
102
- creditsAvailable={project.creditsAvailable}
102
+ creditAvailability={project.creditAvailability}
103
103
  projectDeveloper={project.projectDeveloper?.name}
104
104
  />
105
105
  </MinimalProviders>
@@ -3,8 +3,8 @@ import { StoryFn, Meta } from '@storybook/react';
3
3
 
4
4
  import { storybookStrapiCoverMock } from '../../test/storybookMocks/storybookStrapiMedia';
5
5
  import TextWithCard from '.';
6
- import CreditsAvailableState from '../../models/CreditsAvailableState';
7
6
  import { IStrapiData, PortfolioProject, StrapiProject } from '../..';
7
+ import { CreditAvailability } from '../../models/fpm/FPMProject';
8
8
 
9
9
  export default {
10
10
  title: 'slices/TextWithCard',
@@ -70,7 +70,7 @@ const portfolioProject: PortfolioProject = {
70
70
  riskBuffer: 10,
71
71
  createdAt: new Date('2020-01-01'),
72
72
  updatedAt: new Date('2020-01-01'),
73
- creditsAvailable: CreditsAvailableState.YES,
73
+ creditAvailability: CreditAvailability.CREDITS_AVAILABLE,
74
74
  slug: 'portfolio-slug',
75
75
  thumbnail: {
76
76
  img: { data: storybookStrapiCoverMock },
@@ -84,7 +84,6 @@ const project: IStrapiData<StrapiProject> = {
84
84
  slug: 'slug',
85
85
  locale: 'en',
86
86
  fpmProjectId: portfolioProject.id,
87
- creditsAvailable: CreditsAvailableState.YES,
88
87
  footerSubTitle: 'Certified, 2023',
89
88
  createdAt: '2022-01-10T15:04:32.897Z',
90
89
  updatedAt: '2022-01-11T10:21:42.317Z',
@@ -16,7 +16,7 @@ import StrapiLink from '../../models/strapi/StrapiLink';
16
16
  import StrapiProjectCard from '../../models/strapi/StrapiProjectCard';
17
17
  import StrapiLinkButton from '../../components/StrapiLinkButton';
18
18
  import { IStrapiData, PortfolioProject, StrapiProject } from '../..';
19
- import PortfolioProjectCard from '../../components/portfolio/PortfolioProjectCard';
19
+ import ProjectGridCard from '../ProjectGridCard';
20
20
 
21
21
  interface TextWithCardSlice {
22
22
  tagline?: string;
@@ -53,7 +53,7 @@ export const TextWithCard: React.FC<TextWithCardProps> = ({
53
53
  position="relative"
54
54
  data-testid={`card-position-${slice.cardPosition}`}
55
55
  >
56
- {portfolioProject && <PortfolioProjectCard project={portfolioProject} />}
56
+ {portfolioProject && <ProjectGridCard project={portfolioProject} />}
57
57
  {!portfolioProject && slice.card && (
58
58
  <ProjectCard
59
59
  facts={slice.card.facts}
@@ -0,0 +1,16 @@
1
+ import { PortfolioProject } from '../..';
2
+ import fpmProjectMock from './fpmProjectMock';
3
+ import { storybookStrapiCoverMock } from '../storybookMocks/storybookStrapiMedia';
4
+
5
+ const fpmPortfolioProjectMock: PortfolioProject = {
6
+ ...fpmProjectMock,
7
+ isPublic: true,
8
+ footerSubTitle: 'Certified, 2023',
9
+ thumbnail: {
10
+ id: 1,
11
+ img: { data: storybookStrapiCoverMock },
12
+ alt: 'Project Thumbnail',
13
+ },
14
+ };
15
+
16
+ export default fpmPortfolioProjectMock;
@@ -1,4 +1,4 @@
1
- import FPMProject from '../../models/fpm/FPMProject';
1
+ import FPMProject, { CreditAvailability } from '../../models/fpm/FPMProject';
2
2
 
3
3
  const fpmProjectMock: FPMProject = {
4
4
  id: '1',
@@ -32,6 +32,7 @@ const fpmProjectMock: FPMProject = {
32
32
  riskBuffer: 10,
33
33
  createdAt: new Date('2020-01-01'),
34
34
  updatedAt: new Date('2020-01-01'),
35
+ creditAvailability: CreditAvailability.CREDITS_AVAILABLE,
35
36
  };
36
37
 
37
38
  export default fpmProjectMock;
@@ -1,13 +1,11 @@
1
1
  import { PortfolioProject } from '../..';
2
2
  import fpmProjectMock from './fpmProjectMock';
3
- import { strapiProjectMock } from '../strapiMocks/strapiProject';
4
3
  import { storybookStrapiCoverMock } from '../storybookMocks/storybookStrapiMedia';
5
4
 
6
5
  const portfolioProjectMock: PortfolioProject = {
7
- ...strapiProjectMock.attributes,
8
6
  ...fpmProjectMock,
9
7
  isPublic: true,
10
- footerSubTitle: 'Certified, 2023',
8
+ slug: 'slug',
11
9
  thumbnail: {
12
10
  id: 1,
13
11
  img: { data: storybookStrapiCoverMock },
@@ -1,10 +1,8 @@
1
- import CreditsAvailableState from '../../models/CreditsAvailableState';
2
1
  import PortfolioProject from '../../models/PortfolioProject';
3
2
  import fpmProjectMock from '../../test/integrationMocks/fpmProjectMock';
4
3
 
5
4
  const portfolioProjectMock: PortfolioProject = {
6
5
  ...fpmProjectMock,
7
- creditsAvailable: CreditsAvailableState.YES,
8
6
  slug: 'portfolio-slug',
9
7
  };
10
8
 
@@ -1,6 +1,5 @@
1
1
  import IStrapiData from '../../models/strapi/IStrapiData';
2
2
  import StrapiProject from '../../models/strapi/StrapiProject';
3
- import CreditsAvailableState from '../../models/CreditsAvailableState';
4
3
  import { strapiPortfolioMock } from './strapiPortfolioMock';
5
4
  import fpmProjectMock from '../integrationMocks/fpmProjectMock';
6
5
  import { strapiMediaMock } from './strapiMedia';
@@ -11,7 +10,6 @@ export const strapiProjectMock: IStrapiData<StrapiProject> = {
11
10
  slug: 'slug',
12
11
  locale: 'en',
13
12
  fpmProjectId: fpmProjectMock.id,
14
- creditsAvailable: CreditsAvailableState.YES,
15
13
  footerSubTitle: 'Certified, 2023',
16
14
  createdAt: '2022-01-10T15:04:32.897Z',
17
15
  updatedAt: '2022-01-11T10:21:42.317Z',
@@ -1,6 +0,0 @@
1
- import React from 'react';
2
- import { PortfolioProject } from '../../..';
3
- export interface PortfolioProjectCardProps {
4
- project: PortfolioProject;
5
- }
6
- export declare const PortfolioProjectCard: ({ project, }: PortfolioProjectCardProps) => React.JSX.Element;
@@ -1,2 +0,0 @@
1
- import { PortfolioProjectCard } from './PortfolioProjectCard';
2
- export default PortfolioProjectCard;
@@ -1,7 +0,0 @@
1
- declare const messagesDe: {
2
- 'components.portfolioProjectCard.text.yes': string;
3
- 'components.portfolioProjectCard.text.some': string;
4
- 'components.portfolioProjectCard.text.no': string;
5
- 'components.portfolioProjectCard.text.notYet': string;
6
- };
7
- export default messagesDe;
@@ -1,7 +0,0 @@
1
- declare const messagesEn: {
2
- 'components.portfolioProjectCard.text.yes': string;
3
- 'components.portfolioProjectCard.text.some': string;
4
- 'components.portfolioProjectCard.text.no': string;
5
- 'components.portfolioProjectCard.text.notYet': string;
6
- };
7
- export default messagesEn;
@@ -1,7 +0,0 @@
1
- declare enum CreditsAvailableState {
2
- YES = "yes",
3
- SOME = "some",
4
- NO = "no",
5
- NOT_YET = "notYet"
6
- }
7
- export default CreditsAvailableState;
@@ -1,53 +0,0 @@
1
- import React from 'react';
2
- import { render, screen } from '../../../test/testUtils';
3
- import PortfolioProjectCard from '.';
4
- import { PortfolioProjectCardProps } from './PortfolioProjectCard';
5
- import portfolioProjectMock from '../../../test/integrationMocks/portfolioProjectMock';
6
- import messagesEn from './messages.en';
7
-
8
- const defaultProps: PortfolioProjectCardProps = {
9
- project: portfolioProjectMock,
10
- };
11
-
12
- const setup = (props = {}) => {
13
- const combinedProps = { ...defaultProps, ...props };
14
- render(<PortfolioProjectCard {...combinedProps} />);
15
- };
16
-
17
- describe('The PortfolioProjectCard component', () => {
18
- it('displays the project card', () => {
19
- setup();
20
-
21
- expect(screen.getByText(portfolioProjectMock.title)).toBeInTheDocument();
22
- });
23
-
24
- it('displays the area', () => {
25
- setup();
26
-
27
- expect(screen.getByText('140 ha')).toBeInTheDocument();
28
- });
29
-
30
- it('displays the location', () => {
31
- setup();
32
-
33
- expect(
34
- screen.getByText(portfolioProjectMock.location as string)
35
- ).toBeInTheDocument();
36
- });
37
-
38
- it('displays the credits availability', () => {
39
- setup();
40
-
41
- expect(
42
- screen.getByText(messagesEn['components.portfolioProjectCard.text.yes'])
43
- ).toBeInTheDocument();
44
- });
45
-
46
- it('displays the footer sub title', () => {
47
- setup();
48
-
49
- expect(
50
- screen.getByText(portfolioProjectMock.footerSubTitle as string)
51
- ).toBeInTheDocument();
52
- });
53
- });
@@ -1,69 +0,0 @@
1
- import React, { useContext } from 'react';
2
- import { ProjectCard } from 'boemly';
3
- import { PortfolioProject, strapiMediaUrl } from '../../..';
4
- import CreditsAvailableState from '../../../models/CreditsAvailableState';
5
- import { FORMAT_AS_HECTARE_CONFIG } from '../../../constants/formatter';
6
- import Image from 'next/image';
7
- import { IntlContext } from '../../ContextProvider';
8
-
9
- export interface PortfolioProjectCardProps {
10
- project: PortfolioProject;
11
- }
12
-
13
- export const PortfolioProjectCard = ({
14
- project,
15
- }: PortfolioProjectCardProps) => {
16
- const { formatMessage, formatNumber } = useContext(IntlContext);
17
-
18
- const creditsAvailableMessages: Record<CreditsAvailableState, string> = {
19
- [CreditsAvailableState.YES]: formatMessage({
20
- id: 'components.portfolioProjectCard.text.yes',
21
- }),
22
-
23
- [CreditsAvailableState.SOME]: formatMessage({
24
- id: 'components.portfolioProjectCard.text.some',
25
- }),
26
-
27
- [CreditsAvailableState.NO]: formatMessage({
28
- id: 'components.portfolioProjectCard.text.no',
29
- }),
30
-
31
- [CreditsAvailableState.NOT_YET]: formatMessage({
32
- id: 'components.portfolioProjectCard.text.notYet',
33
- }),
34
- };
35
-
36
- return (
37
- <ProjectCard
38
- title={project.title}
39
- facts={[
40
- {
41
- id: 1,
42
- text: formatNumber(
43
- (project.area || 0) / 10000,
44
- FORMAT_AS_HECTARE_CONFIG
45
- ),
46
- },
47
- { id: 2, text: project.location || '' },
48
- ]}
49
- footerTitle={
50
- creditsAvailableMessages[
51
- project.creditsAvailable ?? CreditsAvailableState.NOT_YET
52
- ]
53
- }
54
- footerSubTitle={project.footerSubTitle || ''}
55
- image={
56
- project.thumbnail && (
57
- <Image
58
- src={strapiMediaUrl(project.thumbnail?.img, 'medium')}
59
- alt={project.thumbnail?.alt}
60
- fill
61
- style={{
62
- objectFit: project.thumbnail?.objectFit || 'cover',
63
- }}
64
- />
65
- )
66
- }
67
- />
68
- );
69
- };
@@ -1,3 +0,0 @@
1
- import { PortfolioProjectCard } from './PortfolioProjectCard';
2
-
3
- export default PortfolioProjectCard;
@@ -1,8 +0,0 @@
1
- const messagesDe = {
2
- 'components.portfolioProjectCard.text.yes': 'Credits verfügbar',
3
- 'components.portfolioProjectCard.text.some': 'Einige verbleibende Credits',
4
- 'components.portfolioProjectCard.text.no': 'Keine verbleibenden Credits',
5
- 'components.portfolioProjectCard.text.notYet': 'Gutschriften bald verfügbar',
6
- };
7
-
8
- export default messagesDe;
@@ -1,8 +0,0 @@
1
- const messagesEn = {
2
- 'components.portfolioProjectCard.text.yes': 'Credits available',
3
- 'components.portfolioProjectCard.text.some': 'Some remaining credits',
4
- 'components.portfolioProjectCard.text.no': 'No remaining credits',
5
- 'components.portfolioProjectCard.text.notYet': 'Credits available soon',
6
- };
7
-
8
- export default messagesEn;
@@ -1,8 +0,0 @@
1
- enum CreditsAvailableState {
2
- YES = 'yes',
3
- SOME = 'some',
4
- NO = 'no',
5
- NOT_YET = 'notYet',
6
- }
7
-
8
- export default CreditsAvailableState;