From 3f168a9b5ddbe469c2f031decfef017f58f1900c Mon Sep 17 00:00:00 2001 From: Sebastian Marucci Date: Sun, 5 May 2024 21:18:43 -0300 Subject: [PATCH] feat: add creatives table and sectors page --- package.json | 1 - .../catalog/creative-library.repository.ts | 24 +++++ .../features/repositories/catalog/index.ts | 4 + .../catalog/sectors.repository.ts | 21 ++++ .../repositories/mocks/sectors.mocks.ts | 67 +++++++++++++ .../business-settings.routes.ts | 6 ++ .../pages/sectors/sectors.grid.widget.tsx | 36 +++++++ .../pages/sectors/sectors.page.tsx | 59 ++++++++++++ .../creative-library.page.tsx | 35 ++++++- .../creative-library.table.widget.tsx | 95 +++++++++++++++++++ .../formatters/date.formatter.tool.test.ts | 14 +++ .../tools/formatters/date.formatter.tool.ts | 7 ++ src/app/ui/inputs/search-input.ui.tsx | 22 ++++- src/domain/library/creative-library.domain.ts | 23 +++++ src/domain/sectors/sectors.domain.ts | 23 +++++ src/graphql/client/schema.graphql | 11 ++- src/graphql/client/schema.ts | 56 ++++++++--- src/graphql/client/types.esm.js | 2 +- yarn.lock | 5 - 19 files changed, 482 insertions(+), 29 deletions(-) create mode 100644 src/app/features/repositories/catalog/creative-library.repository.ts create mode 100644 src/app/features/repositories/catalog/sectors.repository.ts create mode 100644 src/app/features/repositories/mocks/sectors.mocks.ts create mode 100644 src/app/pages/creative-intelligence-suite/pages/business-settings/pages/sectors/sectors.grid.widget.tsx create mode 100644 src/app/pages/creative-intelligence-suite/pages/business-settings/pages/sectors/sectors.page.tsx create mode 100644 src/app/pages/creative-intelligence-suite/pages/creative-lab/pages/creative-library/creative-library.table.widget.tsx create mode 100644 src/app/tools/formatters/date.formatter.tool.test.ts create mode 100644 src/app/tools/formatters/date.formatter.tool.ts create mode 100644 src/domain/library/creative-library.domain.ts create mode 100644 src/domain/sectors/sectors.domain.ts diff --git a/package.json b/package.json index 92b1e4b..a95369e 100644 --- a/package.json +++ b/package.json @@ -50,7 +50,6 @@ "logrocket": "^2.2.1", "lottie-react": "^2.4.0", "match-sorter": "^6.3.1", - "omick": "^1.0.0", "pluralize": "^8.0.0", "react": "^17", "react-apexcharts": "^1.4.0", diff --git a/src/app/features/repositories/catalog/creative-library.repository.ts b/src/app/features/repositories/catalog/creative-library.repository.ts new file mode 100644 index 0000000..4a8e560 --- /dev/null +++ b/src/app/features/repositories/catalog/creative-library.repository.ts @@ -0,0 +1,24 @@ +import { CreativeLibraryRepository } from "src/domain/library/creative-library.domain"; +import { + CreativeLibraryFilter, + CreativeLibraryFolder, +} from "src/graphql/client"; +import { client } from "../clients/graphql.client"; + +export class CreativeLibraryBackendRepository + implements CreativeLibraryRepository +{ + async listFolder( + filter: CreativeLibraryFilter, + ): Promise { + return client.chain.query.folder({ input: filter }).get({ + id: true, + creatives: { + name: true, + fileType: true, + createdAt: true, + thumbnailUrl: true, + }, + }) as Promise; + } +} diff --git a/src/app/features/repositories/catalog/index.ts b/src/app/features/repositories/catalog/index.ts index 16a1bec..b877a54 100644 --- a/src/app/features/repositories/catalog/index.ts +++ b/src/app/features/repositories/catalog/index.ts @@ -3,6 +3,8 @@ import { UsersBackendRepository } from "./users.repository"; import { AssetsBackendRepository } from "./assets.repository"; import { BusinessBackendRepository } from "./business.repository"; import { EarlyAccessBackendRepository } from "./early-access.repository"; +import { CreativeLibraryBackendRepository } from "src/app/features/repositories/catalog/creative-library.repository"; +import { SectorsBackendRepository } from "src/app/features/repositories/catalog/sectors.repository"; export const repository = new Map(); @@ -11,3 +13,5 @@ repository.set("UsersRepository", UsersBackendRepository); repository.set("AssetsRepository", AssetsBackendRepository); repository.set("EarlyAccessRepository", EarlyAccessBackendRepository); repository.set("BusinessRepository", BusinessBackendRepository); +repository.set("CreativeLibraryRepository", CreativeLibraryBackendRepository); +repository.set("SectorsRepository", SectorsBackendRepository); diff --git a/src/app/features/repositories/catalog/sectors.repository.ts b/src/app/features/repositories/catalog/sectors.repository.ts new file mode 100644 index 0000000..7698eb4 --- /dev/null +++ b/src/app/features/repositories/catalog/sectors.repository.ts @@ -0,0 +1,21 @@ +import { SectorsRepository } from "src/domain/sectors/sectors.domain"; +import { + sectorsCountsMockData, + sectorsNamesMockData, +} from "src/app/features/repositories/mocks/sectors.mocks"; + +export class SectorsBackendRepository implements SectorsRepository { + async getSectorsCount(): Promise<{ id: number; count: number }[]> { + // TODO: Remove mocks when getSectorsCount BE service becomes available. + return new Promise((resolve) => { + setTimeout(() => resolve(sectorsCountsMockData), 1000); + }); + } + + async getSectorsName(): Promise<{ id: number; name: string }[]> { + // TODO: Remove mocks when getSectorsName BE service becomes available. + return new Promise((resolve) => { + setTimeout(() => resolve(sectorsNamesMockData), 1000); + }); + } +} diff --git a/src/app/features/repositories/mocks/sectors.mocks.ts b/src/app/features/repositories/mocks/sectors.mocks.ts new file mode 100644 index 0000000..5d22900 --- /dev/null +++ b/src/app/features/repositories/mocks/sectors.mocks.ts @@ -0,0 +1,67 @@ +// TODO: This file contain mock responses for sectors repository. Delete it once sectors BE services are available + +export const sectorsNamesMockData = [ + { id: 1, name: "Apparel and Accessories" }, + { id: 2, name: "Beauty and Personal Care" }, + { id: 3, name: "Food and Beverage" }, + { id: 4, name: "Home and Garden" }, + { id: 5, name: "Sports and Fitness" }, + { id: 6, name: "Home Appliances" }, + { id: 7, name: "Home Improvement" }, + { id: 8, name: "Household Supplies" }, + { id: 9, name: "Pet Care" }, + { id: 10, name: "Tobacco and Smoking Accessories" }, + { id: 11, name: "Toys and Games" }, + { id: 12, name: "Oil and Gas" }, + { id: 13, name: "Renewable Energy" }, + { id: 14, name: "Utilities" }, + { id: 15, name: "Banking and Lending" }, + { id: 16, name: "Insurance" }, + { id: 17, name: "Investment and Wealth Management" }, + { id: 18, name: "Pharmaceuticals and Biotechnology" }, + { id: 19, name: "Medical Devices" }, + { id: 20, name: "Healthcare Services" }, + { id: 21, name: "Construction and Engineering" }, + { id: 22, name: "Aerospace and Defense" }, + { id: 23, name: "Transportation Equipment" }, + { id: 24, name: "Software and IT Services" }, + { id: 25, name: "Hardware and Electronics" }, + { id: 26, name: "Internet Services" }, + { id: 27, name: "Telecommunications Equipment" }, + { id: 28, name: "Telecommunications Services" }, + { id: 29, name: "Networking Equipment" }, + { id: 30, name: "Airlines and air transportation" }, +]; + +export const sectorsCountsMockData = [ + { id: 1, count: 457 }, + { id: 2, count: 512 }, + { id: 3, count: 79 }, + { id: 4, count: 687 }, + { id: 5, count: 234 }, + { id: 6, count: 820 }, + { id: 7, count: 112 }, + { id: 8, count: 400 }, + { id: 9, count: 517 }, + { id: 10, count: 300 }, + { id: 11, count: 700 }, + { id: 12, count: 120 }, + { id: 13, count: 350 }, + { id: 14, count: 600 }, + { id: 15, count: 450 }, + { id: 16, count: 250 }, + { id: 17, count: 500 }, + { id: 18, count: 100 }, + { id: 19, count: 550 }, + { id: 20, count: 200 }, + { id: 21, count: 650 }, + { id: 22, count: 150 }, + { id: 23, count: 700 }, + { id: 24, count: 50 }, + { id: 25, count: 750 }, + { id: 26, count: 400 }, + { id: 27, count: 800 }, + { id: 28, count: 350 }, + { id: 29, count: 750 }, + { id: 30, count: 300 }, +]; diff --git a/src/app/pages/creative-intelligence-suite/pages/business-settings/business-settings.routes.ts b/src/app/pages/creative-intelligence-suite/pages/business-settings/business-settings.routes.ts index 52ea3b1..5de4293 100644 --- a/src/app/pages/creative-intelligence-suite/pages/business-settings/business-settings.routes.ts +++ b/src/app/pages/creative-intelligence-suite/pages/business-settings/business-settings.routes.ts @@ -1,5 +1,6 @@ import { lazy } from "react"; import { Route } from "src/app/features/navigation/models/route.model"; +import Sectors from "src/app/pages/creative-intelligence-suite/pages/business-settings/pages/sectors/sectors.page"; const AccountAndBrands = lazy( () => @@ -14,4 +15,9 @@ export const BusinessSettingsRoutes: Route[] = [ element: AccountAndBrands, title: "Account & Brands", }, + { + path: "/business-settings/sectors", + element: Sectors, + title: "Sectors", + }, ]; diff --git a/src/app/pages/creative-intelligence-suite/pages/business-settings/pages/sectors/sectors.grid.widget.tsx b/src/app/pages/creative-intelligence-suite/pages/business-settings/pages/sectors/sectors.grid.widget.tsx new file mode 100644 index 0000000..ed1bb44 --- /dev/null +++ b/src/app/pages/creative-intelligence-suite/pages/business-settings/pages/sectors/sectors.grid.widget.tsx @@ -0,0 +1,36 @@ +import { Col, Row } from "antd"; +import { FC } from "react"; + +export interface SectorsGridWidgetProps { + data?: { id: number; name: string; count: number }[]; + searchText?: string; + loading?: boolean; +} + +const SectorCard: React.FC<{ name: string; count: number }> = (props) => ( +
+
+ {props.name} +
+
{props.count}
+
+); + +export const SectorsGridWidget: FC = ({ data }) => { + return ( + + {data?.map((s) => ( + + + + ))} + + ); +}; diff --git a/src/app/pages/creative-intelligence-suite/pages/business-settings/pages/sectors/sectors.page.tsx b/src/app/pages/creative-intelligence-suite/pages/business-settings/pages/sectors/sectors.page.tsx new file mode 100644 index 0000000..1b64791 --- /dev/null +++ b/src/app/pages/creative-intelligence-suite/pages/business-settings/pages/sectors/sectors.page.tsx @@ -0,0 +1,59 @@ +import { FC, useMemo } from "react"; +import CardPageUI from "src/app/ui/cards/card-page.ui"; +import { Descriptions } from "antd"; +import { SectorsGridWidget } from "src/app/pages/creative-intelligence-suite/pages/business-settings/pages/sectors/sectors.grid.widget"; +import useSWR from "swr"; +import { useSectorsDomain } from "src/domain/sectors/sectors.domain"; +import { EmptyLoaderUI } from "src/app/ui/empty/empty-loader.ui"; +import { EmptyCreateUI } from "src/app/ui/empty/empty-create.ui"; + +const SectorsPage: FC = () => { + const { getSectorsName, getSectorsCount } = useSectorsDomain(); + const { data: sectorsCount, isLoading: isLoadingSectorsCount } = useSWR( + "getSectorsCount", + getSectorsCount, + ); + const { data: sectorsName, isLoading: isLoadingSectorsName } = useSWR( + "getSectorsName", + getSectorsName, + ); + + const data = useMemo(() => { + if (sectorsCount && sectorsName) { + const sectorCountsByKey = sectorsCount.reduce((accum, sc) => { + accum[sc.id] = sc.count; + return accum; + }, {}); + return sectorsName.map((sc) => ({ + id: sc.id, + name: sc.name, + count: sectorCountsByKey[sc.id], + })); + } + }, [sectorsCount, sectorsName]); + + return ( + +
+
+
+ +
+
+ + {!(isLoadingSectorsCount || isLoadingSectorsName) && ( +
+ {data ? ( + + ) : ( + + )} +
+ )} +
+
+ ); +}; +export default SectorsPage; diff --git a/src/app/pages/creative-intelligence-suite/pages/creative-lab/pages/creative-library/creative-library.page.tsx b/src/app/pages/creative-intelligence-suite/pages/creative-lab/pages/creative-library/creative-library.page.tsx index e2fe997..d2392ed 100644 --- a/src/app/pages/creative-intelligence-suite/pages/creative-lab/pages/creative-library/creative-library.page.tsx +++ b/src/app/pages/creative-intelligence-suite/pages/creative-lab/pages/creative-library/creative-library.page.tsx @@ -1,8 +1,26 @@ -import { FC } from "react"; +import { FC, useState } from "react"; import CardPageUI from "src/app/ui/cards/card-page.ui"; import { SearchInputUI } from "src/app/ui/inputs/search-input.ui"; +import { useSessionFeature } from "src/app/features/session/session.feature"; +import { useCreativeLibraryDomain } from "src/domain/library/creative-library.domain"; +import useSWR from "swr"; +import { Descriptions } from "antd"; +import { CreativeLibraryTableWidget } from "src/app/pages/creative-intelligence-suite/pages/creative-lab/pages/creative-library/creative-library.table.widget"; const CreativeLibraryPage: FC = () => { + const { currentBrand } = useSessionFeature(); + const { listFolder } = useCreativeLibraryDomain(); + const [searchText, setSearchText] = useState(); + + const { data, isLoading } = useSWR( + { brandId: currentBrand?.id, creativeType: "Creative" }, + listFolder, + ); + + const onSearchInputChange = (e: React.ChangeEvent) => { + setSearchText(e?.target?.value); + }; + return (
{ padding: "13px 0", }} > - +
-
Insert Table here
+
+
+
+ +
+
+ +
); }; diff --git a/src/app/pages/creative-intelligence-suite/pages/creative-lab/pages/creative-library/creative-library.table.widget.tsx b/src/app/pages/creative-intelligence-suite/pages/creative-lab/pages/creative-library/creative-library.table.widget.tsx new file mode 100644 index 0000000..a67bb7e --- /dev/null +++ b/src/app/pages/creative-intelligence-suite/pages/creative-lab/pages/creative-library/creative-library.table.widget.tsx @@ -0,0 +1,95 @@ +import { Avatar } from "antd"; +import { ColumnsType } from "antd/es/table"; +import { FC } from "react"; +import { TableUI } from "src/app/ui/tables/table.ui"; +import { Creative } from "src/graphql/client"; +import { titleCaseFormatterTool } from "src/app/tools/formatters/title-case.formatter.tool"; +import { dateFormatterTool } from "src/app/tools/formatters/date.formatter.tool"; + +export interface CreativeLibraryTableWidgetProps { + data?: any[]; + searchText?: string; + loading?: boolean; +} + +export const CreativeLibraryTableWidget: FC< + CreativeLibraryTableWidgetProps +> = ({ data = [], loading, searchText = "" }) => { + const generateCreativeLibraryKey = (creative: Creative) => ({ + ...creative, + key: creative.name, + }); + + const columns: ColumnsType = [ + { + title: "Name", + dataIndex: "name", + filteredValue: [searchText], + onFilter: (value, record) => { + const lowerCaseSearchText = searchText.toLocaleLowerCase(); + return ( + record.name.toLocaleLowerCase().includes(lowerCaseSearchText) || + dateFormatterTool( + new Date(record.createdAt), + navigator.language, + ).includes(lowerCaseSearchText) || + titleCaseFormatterTool(record.fileType) + .toLocaleLowerCase() + .includes(lowerCaseSearchText) + ); + }, + render: (name, record) => { + return ( +
+ + {record.thumbnailUrl ? "" : name[0]} + +
+
{name}
+
+
+ ); + }, + }, + { + title: "Uploaded Date", + dataIndex: "createdAt", + render: (createdAt) => { + return ( +
+
+ {dateFormatterTool(new Date(createdAt), navigator.language)} +
+
+ ); + }, + }, + { + title: "File Type", + dataIndex: "fileType", + render: (fileType) => { + return ( +
+
{titleCaseFormatterTool(fileType)}
+
+ ); + }, + }, + ]; + + return ( + + ); +}; diff --git a/src/app/tools/formatters/date.formatter.tool.test.ts b/src/app/tools/formatters/date.formatter.tool.test.ts new file mode 100644 index 0000000..87b233c --- /dev/null +++ b/src/app/tools/formatters/date.formatter.tool.test.ts @@ -0,0 +1,14 @@ +import { dateFormatterTool } from "src/app/tools/formatters/date.formatter.tool"; + +const fn = dateFormatterTool; + +describe("DateFormatterTool", () => { + const dateString = "2019-01-21T00:00:00.000-03:00"; + + it("should return formatted date according to locale", () => { + expect(fn(new Date(dateString))).toBe("01/21/2019"); + expect(fn(new Date(dateString), "en-US")).toBe("01/21/2019"); + expect(fn(new Date(dateString), "es-AR")).toBe("21/01/2019"); + expect(fn(new Date(dateString), "en-GB")).toBe("21/01/2019"); + }); +}); diff --git a/src/app/tools/formatters/date.formatter.tool.ts b/src/app/tools/formatters/date.formatter.tool.ts new file mode 100644 index 0000000..be76f23 --- /dev/null +++ b/src/app/tools/formatters/date.formatter.tool.ts @@ -0,0 +1,7 @@ +export const dateFormatterTool = (date: Date, locale = "en-US") => { + return date.toLocaleDateString(locale, { + day: "2-digit", + month: "2-digit", + year: "numeric", + }); +}; diff --git a/src/app/ui/inputs/search-input.ui.tsx b/src/app/ui/inputs/search-input.ui.tsx index 79e60b2..cd13ce4 100644 --- a/src/app/ui/inputs/search-input.ui.tsx +++ b/src/app/ui/inputs/search-input.ui.tsx @@ -1,11 +1,27 @@ import { Input } from "antd"; -import { FC } from "react"; +import React, { FC, InputHTMLAttributes, useCallback } from "react"; import { SearchOutlined } from "@ant-design/icons"; +import debounce from "lodash.debounce"; +const MAX_SEARCH_FILTER_DEBOUNCE_INTERVAL = 500; + +export const SearchInputUI: FC> = ({ + placeholder, + onChange, + ...props +}) => { + const handleDebouncedChange = useCallback( + debounce(onChange!, MAX_SEARCH_FILTER_DEBOUNCE_INTERVAL), + [onChange], + ); -export const SearchInputUI: FC = () => { return (
- } /> + } + />
); }; diff --git a/src/domain/library/creative-library.domain.ts b/src/domain/library/creative-library.domain.ts new file mode 100644 index 0000000..fc2ea1d --- /dev/null +++ b/src/domain/library/creative-library.domain.ts @@ -0,0 +1,23 @@ +import { useRepositoryFeature } from "src/app/features/repositories/repositories.feature"; +import { + CreativeLibraryFilter, + CreativeLibraryFolder, +} from "src/graphql/client"; + +export interface CreativeLibraryRepository { + listFolder(filter: CreativeLibraryFilter): Promise; +} + +export const useCreativeLibraryDomain = ( + repo = "CreativeLibraryRepository", +) => { + const { repository } = useRepositoryFeature(repo); + + const listFolder = async (filter: CreativeLibraryFilter) => { + return repository.listFolder(filter); + }; + + return { + listFolder, + }; +}; diff --git a/src/domain/sectors/sectors.domain.ts b/src/domain/sectors/sectors.domain.ts new file mode 100644 index 0000000..c7afb90 --- /dev/null +++ b/src/domain/sectors/sectors.domain.ts @@ -0,0 +1,23 @@ +import { useRepositoryFeature } from "src/app/features/repositories/repositories.feature"; + +export interface SectorsRepository { + getSectorsName(): Promise<{ id: number; name: string }[]>; + getSectorsCount(): Promise<{ id: number; count: number }[]>; +} + +export const useSectorsDomain = (repo = "SectorsRepository") => { + const { repository } = useRepositoryFeature(repo); + + const getSectorsName = async () => { + return repository.getSectorsName(); + }; + + const getSectorsCount = async () => { + return repository.getSectorsCount(); + }; + + return { + getSectorsName, + getSectorsCount, + }; +}; diff --git a/src/graphql/client/schema.graphql b/src/graphql/client/schema.graphql index f248fc6..781fa2b 100644 --- a/src/graphql/client/schema.graphql +++ b/src/graphql/client/schema.graphql @@ -104,9 +104,9 @@ type Query { ): [ChannelPerformanceMetrics!] """ - List Folders and creatives from specific folder + Get a folder by its id. If the folderId is not specified, the root folder from the brand will be returned """ - listFolder(input: CreativeLibraryFilter!): CreativeLibraryFolder! + folder(input: CreativeLibraryFilter!): CreativeLibraryFolder! """ Validate Invitation Code @@ -658,9 +658,16 @@ enum CreativeStatus { Ready } +"""All creative type enum values""" +enum CreativeType { + Creative + Animatic +} + input CreativeLibraryFilter { brandId: String! folderId: Int + creativeType: CreativeType = Creative } type User { diff --git a/src/graphql/client/schema.ts b/src/graphql/client/schema.ts index 6ce2f00..5a3b44c 100644 --- a/src/graphql/client/schema.ts +++ b/src/graphql/client/schema.ts @@ -44,8 +44,8 @@ export interface Query { getCreativeProfile?: CreativeProfile; /** Get Performance Metrics */ getPerformanceMetrics?: ChannelPerformanceMetrics[]; - /** List Folders and creatives from specific folder */ - listFolder: CreativeLibraryFolder; + /** Get a folder by its id. If the folderId is not specified, the root folder from the brand will be returned */ + folder: CreativeLibraryFolder; /** Validate Invitation Code */ validateInvitationCode: Scalars["String"]; /** Get logged in user or NULL if it is not logged in */ @@ -474,14 +474,41 @@ export interface PerformanceMetrics { } export interface CreativeLibraryFolder { - id: Scalars["Float"]; - parentId?: Scalars["Float"]; - path: Scalars["String"]; - folders?: CreativeLibraryFolder[]; - creatives?: CreativeLibraryItem[]; - createdAt: Scalars["DateTime"]; - updatedAt: Scalars["DateTime"]; - __typename: "CreativeLibraryFolder"; + id: Scalars['Float'] + parentId: (Scalars['Float'] | null) + path: Scalars['String'] + createdAt: Scalars['DateTime'] + updatedAt: Scalars['DateTime'] + /** Returns a folder childrens */ + folders: CreativeLibraryFolder[] + /** Returns a folder creatives */ + creatives: Creative[] + __typename: 'CreativeLibraryFolder' +} + +/** All creative type enum values */ +export type CreativeType = 'Creative' | 'Animatic' + +export interface Creative { + brandId: Scalars['String'] + createdAt: Scalars['DateTime'] + fileType: FileType + id: Scalars['String'] + name: Scalars['String'] + status: CreativeStatus + type: CreativeType + updatedAt: Scalars['DateTime'] + /** Get creative url */ + url: Scalars['String'] + /** Get creative thumbnail */ + thumbnailUrl: Scalars['String'] + /** Get creative clip embedding */ + clipEmbeddingUrl: (Scalars['String'] | null) + /** Get creative heatmap */ + heatmapUrl: (Scalars['String'] | null) + /** Get tags */ + tags: (Tag[] | null) + __typename: 'Creative' } export interface CreativeLibraryItem { @@ -1178,6 +1205,7 @@ export interface CreativeLibraryItemRequest { export interface CreativeLibraryFilter { brandId: Scalars["String"]; folderId?: Scalars["Int"] | null; + creativeType?: Scalars["String"]; } export interface UserRequest { @@ -1944,8 +1972,8 @@ export interface QueryPromiseChain { ) => Promise[] | undefined>; }; - /** List Folders and creatives from specific folder */ - listFolder: (args: { + /** Get a folder by its id. If the folderId is not specified, the root folder from the brand will be returned*/ + folder: (args: { input: CreativeLibraryFilter; }) => CreativeLibraryFolderPromiseChain & { get: ( @@ -2140,8 +2168,8 @@ export interface QueryObservableChain { >; }; - /** List Folders and creatives from specific folder */ - listFolder: (args: { + /** Get a folder by its id. If the folderId is not specified, the root folder from the brand will be returned */ + folder: (args: { input: CreativeLibraryFilter; }) => CreativeLibraryFolderObservableChain & { get: ( diff --git a/src/graphql/client/types.esm.js b/src/graphql/client/types.esm.js index e6afd53..2273b96 100644 --- a/src/graphql/client/types.esm.js +++ b/src/graphql/client/types.esm.js @@ -107,7 +107,7 @@ export default { brandId: [4, "String!"], }, ], - listFolder: [ + folder: [ 59, { input: [62, "CreativeLibraryFilter!"], diff --git a/yarn.lock b/yarn.lock index 03b6f85..44c5b9f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7193,11 +7193,6 @@ oblivious-set@1.0.0: resolved "https://registry.yarnpkg.com/oblivious-set/-/oblivious-set-1.0.0.tgz#c8316f2c2fb6ff7b11b6158db3234c49f733c566" integrity sha512-z+pI07qxo4c2CulUHCDf9lcqDlMSo72N/4rLUpRXf6fu+q8vjt8y0xS+Tlf8NTJDdTXHbdeO1n3MlbctwEoXZw== -omick@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/omick/-/omick-1.0.1.tgz#092a2a0dfcd95e61d4d04411d3477ee1e683a5dd" - integrity sha512-jPdLmz22ZVTcYqyt1xpygyAdjazoL/i+nWNUpsa9gIubVowAmLUs1Y6oMYDploqZV7WOBkKloMB2KHIUTTJCMg== - on-finished@2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f"