@universityofmaryland/web-feeds-library 1.2.3 → 1.2.6
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/README.md +1 -1
- package/dist/composite/academic/slider.js +2 -0
- package/dist/composite/academic/slider.js.map +1 -1
- package/dist/composite/academic/slider.mjs +2 -0
- package/dist/composite/academic/slider.mjs.map +1 -1
- package/dist/composite/events/common/data.d.ts +1 -5
- package/dist/composite/events/common/data.d.ts.map +1 -1
- package/dist/composite/events/common/data.js +1 -0
- package/dist/composite/events/common/data.js.map +1 -1
- package/dist/composite/events/common/data.mjs +1 -0
- package/dist/composite/events/common/data.mjs.map +1 -1
- package/dist/composite/events/common/fetch.js +3 -1
- package/dist/composite/events/common/fetch.js.map +1 -1
- package/dist/composite/events/common/fetch.mjs +3 -1
- package/dist/composite/events/common/fetch.mjs.map +1 -1
- package/dist/composite/events/grid.js +2 -0
- package/dist/composite/events/grid.js.map +1 -1
- package/dist/composite/events/grid.mjs +2 -0
- package/dist/composite/events/grid.mjs.map +1 -1
- package/dist/composite/events/grouped.d.ts.map +1 -1
- package/dist/composite/events/grouped.js +22 -32
- package/dist/composite/events/grouped.js.map +1 -1
- package/dist/composite/events/grouped.mjs +23 -33
- package/dist/composite/events/grouped.mjs.map +1 -1
- package/dist/composite/events/list.js +2 -0
- package/dist/composite/events/list.js.map +1 -1
- package/dist/composite/events/list.mjs +2 -0
- package/dist/composite/events/list.mjs.map +1 -1
- package/dist/composite/events/slider.js +2 -0
- package/dist/composite/events/slider.js.map +1 -1
- package/dist/composite/events/slider.mjs +2 -0
- package/dist/composite/events/slider.mjs.map +1 -1
- package/dist/composite/news/common/data.js +1 -0
- package/dist/composite/news/common/data.js.map +1 -1
- package/dist/composite/news/common/data.mjs +1 -0
- package/dist/composite/news/common/data.mjs.map +1 -1
- package/dist/composite/news/common/fetch.js +3 -1
- package/dist/composite/news/common/fetch.js.map +1 -1
- package/dist/composite/news/common/fetch.mjs +3 -1
- package/dist/composite/news/common/fetch.mjs.map +1 -1
- package/dist/composite/news/featured.js +2 -0
- package/dist/composite/news/featured.js.map +1 -1
- package/dist/composite/news/featured.mjs +2 -0
- package/dist/composite/news/featured.mjs.map +1 -1
- package/dist/composite/news/grid.js +2 -0
- package/dist/composite/news/grid.js.map +1 -1
- package/dist/composite/news/grid.mjs +2 -0
- package/dist/composite/news/grid.mjs.map +1 -1
- package/dist/composite/news/list.js +2 -0
- package/dist/composite/news/list.js.map +1 -1
- package/dist/composite/news/list.mjs +2 -0
- package/dist/composite/news/list.mjs.map +1 -1
- package/dist/elements/layout.d.ts +5 -17
- package/dist/elements/layout.d.ts.map +1 -1
- package/dist/elements/layout.js +36 -44
- package/dist/elements/layout.js.map +1 -1
- package/dist/elements/layout.mjs +37 -45
- package/dist/elements/layout.mjs.map +1 -1
- package/dist/macros/lazy-load.d.ts +2 -5
- package/dist/macros/lazy-load.d.ts.map +1 -1
- package/dist/macros/lazy-load.js +9 -18
- package/dist/macros/lazy-load.js.map +1 -1
- package/dist/macros/lazy-load.mjs +9 -18
- package/dist/macros/lazy-load.mjs.map +1 -1
- package/dist/macros/loader.d.ts +2 -5
- package/dist/macros/loader.d.ts.map +1 -1
- package/dist/macros/loader.js +39 -59
- package/dist/macros/loader.js.map +1 -1
- package/dist/macros/loader.mjs +39 -59
- package/dist/macros/loader.mjs.map +1 -1
- package/dist/macros/no-results.d.ts +2 -5
- package/dist/macros/no-results.d.ts.map +1 -1
- package/dist/macros/no-results.js +21 -26
- package/dist/macros/no-results.js.map +1 -1
- package/dist/macros/no-results.mjs +21 -26
- package/dist/macros/no-results.mjs.map +1 -1
- package/dist/macros/slider.d.ts.map +1 -1
- package/dist/macros/slider.js +2 -4
- package/dist/macros/slider.js.map +1 -1
- package/dist/macros/slider.mjs +2 -4
- package/dist/macros/slider.mjs.map +1 -1
- package/package.json +12 -3
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# University of Maryland Feeds Library
|
|
2
2
|
|
|
3
|
-
[](https://www.npmjs.com/package/@universityofmaryland/web-feeds-library)
|
|
4
4
|
|
|
5
5
|
Dynamic content feed components for displaying University of Maryland news, events, and academic information with automatic updates, caching, and brand-compliant styling.
|
|
6
6
|
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
require("@universityofmaryland/web-styles-library");
|
|
3
|
+
require("@universityofmaryland/web-builder-library");
|
|
3
4
|
require("@universityofmaryland/web-elements-library");
|
|
5
|
+
require("@universityofmaryland/web-utilities-library/theme");
|
|
4
6
|
const slider$1 = require("../../macros/slider.js");
|
|
5
7
|
const QUERY_DATA = `
|
|
6
8
|
title
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slider.js","sources":["../../../source/composite/academic/slider.ts"],"sourcesContent":["import * as feedMacros from 'macros';\nimport { type AcademicSliderProps } from './_types';\nimport { type ElementModel } from '../../_types';\n\nconst QUERY_DATA = `\n title\n url\n startMonth: startDate @formatDateTime(format: \"M\")\n startDay: startDate @formatDateTime(format: \"d\")\n endMonth: endDate @formatDateTime(format: \"M\")\n endDay: endDate @formatDateTime(format: \"d\")\n`;\n\nconst query = `\n query getEvents($startDate: String!, $related: [QueryArgument]) {\n entries: solspace_calendar {\n events(\n relatedTo: $related\n loadOccurrences: true\n startsAfterOrAt: $startDate\n limit: 12\n calendarId: [4, 2]\n ) {\n ${QUERY_DATA}\n }\n }\n }\n`;\n\nexport default (props: AcademicSliderProps): ElementModel =>\n feedMacros.slider({\n ...props,\n query,\n url: 'https://provost.umd.edu/graphql',\n });\n"],"names":["feedMacros.slider"],"mappings":"
|
|
1
|
+
{"version":3,"file":"slider.js","sources":["../../../source/composite/academic/slider.ts"],"sourcesContent":["import * as feedMacros from 'macros';\nimport { type AcademicSliderProps } from './_types';\nimport { type ElementModel } from '../../_types';\n\nconst QUERY_DATA = `\n title\n url\n startMonth: startDate @formatDateTime(format: \"M\")\n startDay: startDate @formatDateTime(format: \"d\")\n endMonth: endDate @formatDateTime(format: \"M\")\n endDay: endDate @formatDateTime(format: \"d\")\n`;\n\nconst query = `\n query getEvents($startDate: String!, $related: [QueryArgument]) {\n entries: solspace_calendar {\n events(\n relatedTo: $related\n loadOccurrences: true\n startsAfterOrAt: $startDate\n limit: 12\n calendarId: [4, 2]\n ) {\n ${QUERY_DATA}\n }\n }\n }\n`;\n\nexport default (props: AcademicSliderProps): ElementModel =>\n feedMacros.slider({\n ...props,\n query,\n url: 'https://provost.umd.edu/graphql',\n });\n"],"names":["feedMacros.slider"],"mappings":";;;;;;AAIA,MAAM,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASnB,MAAM,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAUJ,UAAU;AAAA;AAAA;AAAA;AAAA;AAMpB,MAAA,SAAe,CAAC,UACdA,SAAkB;AAAA,EAChB,GAAG;AAAA,EACH;AAAA,EACA,KAAK;AACP,CAAC;;"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import "@universityofmaryland/web-styles-library";
|
|
2
|
+
import "@universityofmaryland/web-builder-library";
|
|
2
3
|
import "@universityofmaryland/web-elements-library";
|
|
4
|
+
import "@universityofmaryland/web-utilities-library/theme";
|
|
3
5
|
import slider$1 from "../../macros/slider.mjs";
|
|
4
6
|
const QUERY_DATA = `
|
|
5
7
|
title
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slider.mjs","sources":["../../../source/composite/academic/slider.ts"],"sourcesContent":["import * as feedMacros from 'macros';\nimport { type AcademicSliderProps } from './_types';\nimport { type ElementModel } from '../../_types';\n\nconst QUERY_DATA = `\n title\n url\n startMonth: startDate @formatDateTime(format: \"M\")\n startDay: startDate @formatDateTime(format: \"d\")\n endMonth: endDate @formatDateTime(format: \"M\")\n endDay: endDate @formatDateTime(format: \"d\")\n`;\n\nconst query = `\n query getEvents($startDate: String!, $related: [QueryArgument]) {\n entries: solspace_calendar {\n events(\n relatedTo: $related\n loadOccurrences: true\n startsAfterOrAt: $startDate\n limit: 12\n calendarId: [4, 2]\n ) {\n ${QUERY_DATA}\n }\n }\n }\n`;\n\nexport default (props: AcademicSliderProps): ElementModel =>\n feedMacros.slider({\n ...props,\n query,\n url: 'https://provost.umd.edu/graphql',\n });\n"],"names":["feedMacros.slider"],"mappings":"
|
|
1
|
+
{"version":3,"file":"slider.mjs","sources":["../../../source/composite/academic/slider.ts"],"sourcesContent":["import * as feedMacros from 'macros';\nimport { type AcademicSliderProps } from './_types';\nimport { type ElementModel } from '../../_types';\n\nconst QUERY_DATA = `\n title\n url\n startMonth: startDate @formatDateTime(format: \"M\")\n startDay: startDate @formatDateTime(format: \"d\")\n endMonth: endDate @formatDateTime(format: \"M\")\n endDay: endDate @formatDateTime(format: \"d\")\n`;\n\nconst query = `\n query getEvents($startDate: String!, $related: [QueryArgument]) {\n entries: solspace_calendar {\n events(\n relatedTo: $related\n loadOccurrences: true\n startsAfterOrAt: $startDate\n limit: 12\n calendarId: [4, 2]\n ) {\n ${QUERY_DATA}\n }\n }\n }\n`;\n\nexport default (props: AcademicSliderProps): ElementModel =>\n feedMacros.slider({\n ...props,\n query,\n url: 'https://provost.umd.edu/graphql',\n });\n"],"names":["feedMacros.slider"],"mappings":";;;;;AAIA,MAAM,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASnB,MAAM,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAUJ,UAAU;AAAA;AAAA;AAAA;AAAA;AAMpB,MAAA,SAAe,CAAC,UACdA,SAAkB;AAAA,EAChB,GAAG;AAAA,EACH;AAAA,EACA,KAAK;AACP,CAAC;"}
|
|
@@ -37,11 +37,7 @@ export declare const display: ({ entry, isThemeDark, }: {
|
|
|
37
37
|
}) => {
|
|
38
38
|
headline: HTMLParagraphElement | null;
|
|
39
39
|
text: HTMLDivElement | null;
|
|
40
|
-
eventMeta:
|
|
41
|
-
element: HTMLElement;
|
|
42
|
-
className: string;
|
|
43
|
-
styles: string;
|
|
44
|
-
};
|
|
40
|
+
eventMeta: import('@universityofmaryland/web-builder-library').ElementModel<HTMLElement>;
|
|
45
41
|
isThemeDark: boolean | undefined;
|
|
46
42
|
};
|
|
47
43
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../../../source/composite/events/common/data.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,SAAS,MAAM,SAAS,CAAC;AACrC,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,YAAY,EACZ,SAAS,EACT,WAAW,EACZ,MAAM,WAAW,CAAC;AAEnB,UAAU,aAAc,SAAQ,YAAY;IAC1C,QAAQ,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACvD;AAED,UAAU,YAAa,SAAQ,WAAW;CAAG;AAE7C,eAAO,MAAM,iBAAiB,GAAI,OAAO,aAAa;;;;;;;;;;;;;;;;;;;;;;;CAMpD,CAAC;AAEH,eAAO,MAAM,YAAY,GACvB,OAAO,YAAY,KAClB,SAAS,CAAC,oBAuBZ,CAAC;AAEF,eAAO,MAAM,OAAO,GAAI,yBAGrB;IACD,KAAK,EAAE,SAAS,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB
|
|
1
|
+
{"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../../../source/composite/events/common/data.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,SAAS,MAAM,SAAS,CAAC;AACrC,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,YAAY,EACZ,SAAS,EACT,WAAW,EACZ,MAAM,WAAW,CAAC;AAEnB,UAAU,aAAc,SAAQ,YAAY;IAC1C,QAAQ,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACvD;AAED,UAAU,YAAa,SAAQ,WAAW;CAAG;AAE7C,eAAO,MAAM,iBAAiB,GAAI,OAAO,aAAa;;;;;;;;;;;;;;;;;;;;;;;CAMpD,CAAC;AAEH,eAAO,MAAM,YAAY,GACvB,OAAO,YAAY,KAClB,SAAS,CAAC,oBAuBZ,CAAC;AAEF,eAAO,MAAM,OAAO,GAAI,yBAGrB;IACD,KAAK,EAAE,SAAS,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;;;;;CAWC,CAAC"}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
const webElementsLibrary = require("@universityofmaryland/web-elements-library");
|
|
4
4
|
require("@universityofmaryland/web-styles-library");
|
|
5
|
+
require("@universityofmaryland/web-builder-library");
|
|
5
6
|
const text = require("../../../elements/text.js");
|
|
6
7
|
const fetch = require("./fetch.js");
|
|
7
8
|
const lazyLoadVariables = (props) => ({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data.js","sources":["../../../../source/composite/events/common/data.ts"],"sourcesContent":["import { Atomic } from '@universityofmaryland/web-elements-library';\nimport * as feedElements from 'elements';\nimport * as feedFetch from './fetch';\nimport {\n CommonProps,\n DisplayStartProps,\n DisplayProps,\n EventType,\n FeedDisplay,\n} from '../_types';\n\ninterface LazyLoadProps extends DisplayProps {\n callback: (props: DisplayStartProps) => Promise<void>;\n}\n\ninterface DataApiProps extends CommonProps {}\n\nexport const lazyLoadVariables = (props: LazyLoadProps) => ({\n ...props,\n totalEntries: props.getTotalEntries(),\n offset: props.getOffset(),\n container: props.getContainer(),\n callback: () => feedFetch.load(props),\n});\n\nexport const apiVariables = (\n props: DataApiProps,\n): feedFetch.TypeAPIFeedVariables => {\n const {\n categories,\n getOffset,\n token,\n numberOfRowsToStart,\n numberOfColumnsToShow = 1,\n } = props;\n const obj: feedFetch.TypeAPIFeedVariables = {\n offset: getOffset(),\n token,\n limit: numberOfRowsToStart,\n };\n\n if (numberOfColumnsToShow) {\n obj.limit = numberOfColumnsToShow * numberOfRowsToStart;\n }\n\n if (categories) {\n obj.related = categories;\n }\n\n return obj;\n};\n\nexport const display = ({\n entry,\n isThemeDark,\n}: {\n entry: EventType;\n isThemeDark?: boolean;\n isTransparent?: boolean;\n}) => ({\n headline: feedElements.text.headline({\n text: entry.title,\n url: entry.url,\n }),\n text: feedElements.text.summary({ text: entry.summary }),\n eventMeta: Atomic.events.meta({\n ...entry,\n isThemeDark,\n }),\n isThemeDark,\n});\n"],"names":["feedFetch.load","feedElements.text.headline","feedElements.text.summary","Atomic"],"mappings":"
|
|
1
|
+
{"version":3,"file":"data.js","sources":["../../../../source/composite/events/common/data.ts"],"sourcesContent":["import { Atomic } from '@universityofmaryland/web-elements-library';\nimport * as feedElements from 'elements';\nimport * as feedFetch from './fetch';\nimport {\n CommonProps,\n DisplayStartProps,\n DisplayProps,\n EventType,\n FeedDisplay,\n} from '../_types';\n\ninterface LazyLoadProps extends DisplayProps {\n callback: (props: DisplayStartProps) => Promise<void>;\n}\n\ninterface DataApiProps extends CommonProps {}\n\nexport const lazyLoadVariables = (props: LazyLoadProps) => ({\n ...props,\n totalEntries: props.getTotalEntries(),\n offset: props.getOffset(),\n container: props.getContainer(),\n callback: () => feedFetch.load(props),\n});\n\nexport const apiVariables = (\n props: DataApiProps,\n): feedFetch.TypeAPIFeedVariables => {\n const {\n categories,\n getOffset,\n token,\n numberOfRowsToStart,\n numberOfColumnsToShow = 1,\n } = props;\n const obj: feedFetch.TypeAPIFeedVariables = {\n offset: getOffset(),\n token,\n limit: numberOfRowsToStart,\n };\n\n if (numberOfColumnsToShow) {\n obj.limit = numberOfColumnsToShow * numberOfRowsToStart;\n }\n\n if (categories) {\n obj.related = categories;\n }\n\n return obj;\n};\n\nexport const display = ({\n entry,\n isThemeDark,\n}: {\n entry: EventType;\n isThemeDark?: boolean;\n isTransparent?: boolean;\n}) => ({\n headline: feedElements.text.headline({\n text: entry.title,\n url: entry.url,\n }),\n text: feedElements.text.summary({ text: entry.summary }),\n eventMeta: Atomic.events.meta({\n ...entry,\n isThemeDark,\n }),\n isThemeDark,\n});\n"],"names":["feedFetch.load","feedElements.text.headline","feedElements.text.summary","Atomic"],"mappings":";;;;;;;AAiBO,MAAM,oBAAoB,CAAC,WAA0B;AAAA,EAC1D,GAAG;AAAA,EACH,cAAc,MAAM,gBAAA;AAAA,EACpB,QAAQ,MAAM,UAAA;AAAA,EACd,WAAW,MAAM,aAAA;AAAA,EACjB,UAAU,MAAMA,MAAAA,KAAe,KAAK;AACtC;AAEO,MAAM,eAAe,CAC1B,UACmC;AACnC,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,wBAAwB;AAAA,EAAA,IACtB;AACJ,QAAM,MAAsC;AAAA,IAC1C,QAAQ,UAAA;AAAA,IACR;AAAA,IACA,OAAO;AAAA,EAAA;AAGT,MAAI,uBAAuB;AACzB,QAAI,QAAQ,wBAAwB;AAAA,EACtC;AAEA,MAAI,YAAY;AACd,QAAI,UAAU;AAAA,EAChB;AAEA,SAAO;AACT;AAEO,MAAM,UAAU,CAAC;AAAA,EACtB;AAAA,EACA;AACF,OAIO;AAAA,EACL,UAAUC,KAAAA,SAA2B;AAAA,IACnC,MAAM,MAAM;AAAA,IACZ,KAAK,MAAM;AAAA,EAAA,CACZ;AAAA,EACD,MAAMC,KAAAA,QAA0B,EAAE,MAAM,MAAM,SAAS;AAAA,EACvD,WAAWC,mBAAAA,OAAO,OAAO,KAAK;AAAA,IAC5B,GAAG;AAAA,IACH;AAAA,EAAA,CACD;AAAA,EACD;AACF;;;;"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Atomic } from "@universityofmaryland/web-elements-library";
|
|
2
2
|
import "@universityofmaryland/web-styles-library";
|
|
3
|
+
import "@universityofmaryland/web-builder-library";
|
|
3
4
|
import { summary, headline } from "../../../elements/text.mjs";
|
|
4
5
|
import { load } from "./fetch.mjs";
|
|
5
6
|
const lazyLoadVariables = (props) => ({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data.mjs","sources":["../../../../source/composite/events/common/data.ts"],"sourcesContent":["import { Atomic } from '@universityofmaryland/web-elements-library';\nimport * as feedElements from 'elements';\nimport * as feedFetch from './fetch';\nimport {\n CommonProps,\n DisplayStartProps,\n DisplayProps,\n EventType,\n FeedDisplay,\n} from '../_types';\n\ninterface LazyLoadProps extends DisplayProps {\n callback: (props: DisplayStartProps) => Promise<void>;\n}\n\ninterface DataApiProps extends CommonProps {}\n\nexport const lazyLoadVariables = (props: LazyLoadProps) => ({\n ...props,\n totalEntries: props.getTotalEntries(),\n offset: props.getOffset(),\n container: props.getContainer(),\n callback: () => feedFetch.load(props),\n});\n\nexport const apiVariables = (\n props: DataApiProps,\n): feedFetch.TypeAPIFeedVariables => {\n const {\n categories,\n getOffset,\n token,\n numberOfRowsToStart,\n numberOfColumnsToShow = 1,\n } = props;\n const obj: feedFetch.TypeAPIFeedVariables = {\n offset: getOffset(),\n token,\n limit: numberOfRowsToStart,\n };\n\n if (numberOfColumnsToShow) {\n obj.limit = numberOfColumnsToShow * numberOfRowsToStart;\n }\n\n if (categories) {\n obj.related = categories;\n }\n\n return obj;\n};\n\nexport const display = ({\n entry,\n isThemeDark,\n}: {\n entry: EventType;\n isThemeDark?: boolean;\n isTransparent?: boolean;\n}) => ({\n headline: feedElements.text.headline({\n text: entry.title,\n url: entry.url,\n }),\n text: feedElements.text.summary({ text: entry.summary }),\n eventMeta: Atomic.events.meta({\n ...entry,\n isThemeDark,\n }),\n isThemeDark,\n});\n"],"names":["feedFetch.load","feedElements.text.headline","feedElements.text.summary"],"mappings":"
|
|
1
|
+
{"version":3,"file":"data.mjs","sources":["../../../../source/composite/events/common/data.ts"],"sourcesContent":["import { Atomic } from '@universityofmaryland/web-elements-library';\nimport * as feedElements from 'elements';\nimport * as feedFetch from './fetch';\nimport {\n CommonProps,\n DisplayStartProps,\n DisplayProps,\n EventType,\n FeedDisplay,\n} from '../_types';\n\ninterface LazyLoadProps extends DisplayProps {\n callback: (props: DisplayStartProps) => Promise<void>;\n}\n\ninterface DataApiProps extends CommonProps {}\n\nexport const lazyLoadVariables = (props: LazyLoadProps) => ({\n ...props,\n totalEntries: props.getTotalEntries(),\n offset: props.getOffset(),\n container: props.getContainer(),\n callback: () => feedFetch.load(props),\n});\n\nexport const apiVariables = (\n props: DataApiProps,\n): feedFetch.TypeAPIFeedVariables => {\n const {\n categories,\n getOffset,\n token,\n numberOfRowsToStart,\n numberOfColumnsToShow = 1,\n } = props;\n const obj: feedFetch.TypeAPIFeedVariables = {\n offset: getOffset(),\n token,\n limit: numberOfRowsToStart,\n };\n\n if (numberOfColumnsToShow) {\n obj.limit = numberOfColumnsToShow * numberOfRowsToStart;\n }\n\n if (categories) {\n obj.related = categories;\n }\n\n return obj;\n};\n\nexport const display = ({\n entry,\n isThemeDark,\n}: {\n entry: EventType;\n isThemeDark?: boolean;\n isTransparent?: boolean;\n}) => ({\n headline: feedElements.text.headline({\n text: entry.title,\n url: entry.url,\n }),\n text: feedElements.text.summary({ text: entry.summary }),\n eventMeta: Atomic.events.meta({\n ...entry,\n isThemeDark,\n }),\n isThemeDark,\n});\n"],"names":["feedFetch.load","feedElements.text.headline","feedElements.text.summary"],"mappings":";;;;;AAiBO,MAAM,oBAAoB,CAAC,WAA0B;AAAA,EAC1D,GAAG;AAAA,EACH,cAAc,MAAM,gBAAA;AAAA,EACpB,QAAQ,MAAM,UAAA;AAAA,EACd,WAAW,MAAM,aAAA;AAAA,EACjB,UAAU,MAAMA,KAAe,KAAK;AACtC;AAEO,MAAM,eAAe,CAC1B,UACmC;AACnC,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,wBAAwB;AAAA,EAAA,IACtB;AACJ,QAAM,MAAsC;AAAA,IAC1C,QAAQ,UAAA;AAAA,IACR;AAAA,IACA,OAAO;AAAA,EAAA;AAGT,MAAI,uBAAuB;AACzB,QAAI,QAAQ,wBAAwB;AAAA,EACtC;AAEA,MAAI,YAAY;AACd,QAAI,UAAU;AAAA,EAChB;AAEA,SAAO;AACT;AAEO,MAAM,UAAU,CAAC;AAAA,EACtB;AAAA,EACA;AACF,OAIO;AAAA,EACL,UAAUC,SAA2B;AAAA,IACnC,MAAM,MAAM;AAAA,IACZ,KAAK,MAAM;AAAA,EAAA,CACZ;AAAA,EACD,MAAMC,QAA0B,EAAE,MAAM,MAAM,SAAS;AAAA,EACvD,WAAW,OAAO,OAAO,KAAK;AAAA,IAC5B,GAAG;AAAA,IACH;AAAA,EAAA,CACD;AAAA,EACD;AACF;"}
|
|
@@ -4,8 +4,10 @@ const network = require("@universityofmaryland/web-utilities-library/network");
|
|
|
4
4
|
const ariaLive = require("../../../macros/aria-live.js");
|
|
5
5
|
const lazyLoad = require("../../../macros/lazy-load.js");
|
|
6
6
|
const loader = require("../../../macros/loader.js");
|
|
7
|
-
require("@universityofmaryland/web-
|
|
7
|
+
require("@universityofmaryland/web-builder-library");
|
|
8
8
|
require("@universityofmaryland/web-elements-library");
|
|
9
|
+
require("@universityofmaryland/web-styles-library");
|
|
10
|
+
require("@universityofmaryland/web-utilities-library/theme");
|
|
9
11
|
require("@universityofmaryland/web-elements-library/composite");
|
|
10
12
|
require("@universityofmaryland/web-elements-library/atomic");
|
|
11
13
|
const queries = require("./queries.js");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch.js","sources":["../../../../source/composite/events/common/fetch.ts"],"sourcesContent":["import { fetchGraphQL } from '@universityofmaryland/web-utilities-library/network';\nimport * as feedMacros from 'macros';\nimport { EVENTS_COUNT_QUERY, EVENTS_QUERY } from './queries';\nimport * as dataComposed from './data';\nimport {\n NoResultsProps,\n DisplayStartProps,\n DisplayStartResultsProps,\n DisplayProps,\n} from '../_types';\n\ninterface LoadMoreProps extends DisplayProps {\n query?: string;\n}\n\ninterface CreateProps extends DisplayStartProps {\n displayResultStart: (props: DisplayStartResultsProps) => void;\n displayNoResults: (props: NoResultsProps) => void;\n query?: string;\n countQuery?: string;\n}\n\nexport const ID_GRID_LAYOUT_CONTAINER = 'umd-grid-gap-layout-container';\n\ntype TypeFetchVariables = {\n startDate?: string;\n related?: string[];\n limit?: number;\n offset?: number;\n};\n\nexport type TypeAPIFeedVariables = TypeFetchVariables & {\n token: string | null;\n};\n\ntype TypeFetchObject = TypeAPIFeedVariables & {\n query: string;\n};\n\nconst fetchFeed = async ({\n limit,\n related,\n offset,\n token,\n query,\n}: TypeFetchObject) => {\n if (!token) throw new Error('Token not found');\n\n const variables: TypeFetchVariables = {\n startDate: new Date().toDateString(),\n limit,\n related,\n offset,\n };\n\n return await fetchGraphQL({\n query,\n url: 'https://calendar.umd.edu/graphql',\n token: token,\n variables,\n });\n};\n\nconst getCount = async ({\n variables,\n query,\n}: {\n variables: TypeAPIFeedVariables;\n query?: string;\n}) => {\n const feedData = await fetchFeed({\n ...variables,\n query: query || EVENTS_COUNT_QUERY,\n });\n\n if (!feedData || !feedData.data || feedData.message) {\n if (feedData.message) console.error(feedData.message);\n return null;\n }\n\n return feedData?.data?.count?.events?.length || 0;\n};\n\nconst getEntries = async ({\n variables,\n query,\n}: {\n variables: TypeAPIFeedVariables;\n query?: string;\n}) => {\n const feedData = await fetchFeed({\n ...variables,\n query: query || EVENTS_QUERY,\n });\n const graceFail = ({ message }: { message: string }) => {\n throw new Error(message);\n };\n\n if (\n !feedData ||\n !feedData.data ||\n !feedData.data.entries ||\n feedData.message\n ) {\n if (!feedData) graceFail({ message: 'Feed not found' });\n if (!feedData.data) graceFail({ message: 'Feed data not found' });\n if (!feedData.data.entries)\n graceFail({ message: 'Feed entries not found' });\n if (!feedData.data.entries.events)\n graceFail({ message: 'Feed events not found' });\n if (!feedData.message)\n graceFail({ message: `Feed data errors: ${feedData.message}` });\n }\n\n return feedData.data.entries.events;\n};\n\nexport const load = async (props: LoadMoreProps) => {\n const { getContainer, getOffset, displayResults, getTotalEntries } = props;\n const container = getContainer();\n const currentCount = getOffset();\n const totalEntries = getTotalEntries();\n\n feedMacros.buttonLazyLoad.remove({ container });\n feedMacros.loader.display({ container });\n\n getEntries({\n variables: dataComposed.apiVariables(props),\n query: props.query,\n }).then((feedData) => {\n displayResults({ feedData });\n\n feedMacros.ariaLive.update({\n container,\n message: `Showing ${\n currentCount + feedData.length\n } of ${totalEntries} articles`,\n });\n });\n};\n\nexport const start = async (props: CreateProps) => {\n const { displayNoResults, displayResultStart, setTotalEntries } = props;\n\n await getCount({\n variables: dataComposed.apiVariables(props),\n query: props.countQuery,\n }).then((count) => {\n if (count === 0) {\n displayNoResults({ ...props });\n return;\n }\n\n if (count) {\n setTotalEntries(count);\n }\n\n if (count === null) {\n displayNoResults({\n ...props,\n message: 'An error occurred while fetching the data.',\n });\n return;\n }\n });\n\n getEntries({\n variables: dataComposed.apiVariables(props),\n query: props.query,\n }).then((feedData) => displayResultStart({ ...props, feedData }));\n};\n"],"names":["fetchGraphQL","EVENTS_COUNT_QUERY","EVENTS_QUERY","feedMacros.buttonLazyLoad","feedMacros.loader","dataComposed.apiVariables","feedMacros.ariaLive"],"mappings":"
|
|
1
|
+
{"version":3,"file":"fetch.js","sources":["../../../../source/composite/events/common/fetch.ts"],"sourcesContent":["import { fetchGraphQL } from '@universityofmaryland/web-utilities-library/network';\nimport * as feedMacros from 'macros';\nimport { EVENTS_COUNT_QUERY, EVENTS_QUERY } from './queries';\nimport * as dataComposed from './data';\nimport {\n NoResultsProps,\n DisplayStartProps,\n DisplayStartResultsProps,\n DisplayProps,\n} from '../_types';\n\ninterface LoadMoreProps extends DisplayProps {\n query?: string;\n}\n\ninterface CreateProps extends DisplayStartProps {\n displayResultStart: (props: DisplayStartResultsProps) => void;\n displayNoResults: (props: NoResultsProps) => void;\n query?: string;\n countQuery?: string;\n}\n\nexport const ID_GRID_LAYOUT_CONTAINER = 'umd-grid-gap-layout-container';\n\ntype TypeFetchVariables = {\n startDate?: string;\n related?: string[];\n limit?: number;\n offset?: number;\n};\n\nexport type TypeAPIFeedVariables = TypeFetchVariables & {\n token: string | null;\n};\n\ntype TypeFetchObject = TypeAPIFeedVariables & {\n query: string;\n};\n\nconst fetchFeed = async ({\n limit,\n related,\n offset,\n token,\n query,\n}: TypeFetchObject) => {\n if (!token) throw new Error('Token not found');\n\n const variables: TypeFetchVariables = {\n startDate: new Date().toDateString(),\n limit,\n related,\n offset,\n };\n\n return await fetchGraphQL({\n query,\n url: 'https://calendar.umd.edu/graphql',\n token: token,\n variables,\n });\n};\n\nconst getCount = async ({\n variables,\n query,\n}: {\n variables: TypeAPIFeedVariables;\n query?: string;\n}) => {\n const feedData = await fetchFeed({\n ...variables,\n query: query || EVENTS_COUNT_QUERY,\n });\n\n if (!feedData || !feedData.data || feedData.message) {\n if (feedData.message) console.error(feedData.message);\n return null;\n }\n\n return feedData?.data?.count?.events?.length || 0;\n};\n\nconst getEntries = async ({\n variables,\n query,\n}: {\n variables: TypeAPIFeedVariables;\n query?: string;\n}) => {\n const feedData = await fetchFeed({\n ...variables,\n query: query || EVENTS_QUERY,\n });\n const graceFail = ({ message }: { message: string }) => {\n throw new Error(message);\n };\n\n if (\n !feedData ||\n !feedData.data ||\n !feedData.data.entries ||\n feedData.message\n ) {\n if (!feedData) graceFail({ message: 'Feed not found' });\n if (!feedData.data) graceFail({ message: 'Feed data not found' });\n if (!feedData.data.entries)\n graceFail({ message: 'Feed entries not found' });\n if (!feedData.data.entries.events)\n graceFail({ message: 'Feed events not found' });\n if (!feedData.message)\n graceFail({ message: `Feed data errors: ${feedData.message}` });\n }\n\n return feedData.data.entries.events;\n};\n\nexport const load = async (props: LoadMoreProps) => {\n const { getContainer, getOffset, displayResults, getTotalEntries } = props;\n const container = getContainer();\n const currentCount = getOffset();\n const totalEntries = getTotalEntries();\n\n feedMacros.buttonLazyLoad.remove({ container });\n feedMacros.loader.display({ container });\n\n getEntries({\n variables: dataComposed.apiVariables(props),\n query: props.query,\n }).then((feedData) => {\n displayResults({ feedData });\n\n feedMacros.ariaLive.update({\n container,\n message: `Showing ${\n currentCount + feedData.length\n } of ${totalEntries} articles`,\n });\n });\n};\n\nexport const start = async (props: CreateProps) => {\n const { displayNoResults, displayResultStart, setTotalEntries } = props;\n\n await getCount({\n variables: dataComposed.apiVariables(props),\n query: props.countQuery,\n }).then((count) => {\n if (count === 0) {\n displayNoResults({ ...props });\n return;\n }\n\n if (count) {\n setTotalEntries(count);\n }\n\n if (count === null) {\n displayNoResults({\n ...props,\n message: 'An error occurred while fetching the data.',\n });\n return;\n }\n });\n\n getEntries({\n variables: dataComposed.apiVariables(props),\n query: props.query,\n }).then((feedData) => displayResultStart({ ...props, feedData }));\n};\n"],"names":["fetchGraphQL","EVENTS_COUNT_QUERY","EVENTS_QUERY","feedMacros.buttonLazyLoad","feedMacros.loader","dataComposed.apiVariables","feedMacros.ariaLive"],"mappings":"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"}
|
|
@@ -2,8 +2,10 @@ import { fetchGraphQL } from "@universityofmaryland/web-utilities-library/networ
|
|
|
2
2
|
import ariaLive from "../../../macros/aria-live.mjs";
|
|
3
3
|
import lazyLoad from "../../../macros/lazy-load.mjs";
|
|
4
4
|
import loader from "../../../macros/loader.mjs";
|
|
5
|
-
import "@universityofmaryland/web-
|
|
5
|
+
import "@universityofmaryland/web-builder-library";
|
|
6
6
|
import "@universityofmaryland/web-elements-library";
|
|
7
|
+
import "@universityofmaryland/web-styles-library";
|
|
8
|
+
import "@universityofmaryland/web-utilities-library/theme";
|
|
7
9
|
import "@universityofmaryland/web-elements-library/composite";
|
|
8
10
|
import "@universityofmaryland/web-elements-library/atomic";
|
|
9
11
|
import { EVENTS_COUNT_QUERY, EVENTS_QUERY } from "./queries.mjs";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch.mjs","sources":["../../../../source/composite/events/common/fetch.ts"],"sourcesContent":["import { fetchGraphQL } from '@universityofmaryland/web-utilities-library/network';\nimport * as feedMacros from 'macros';\nimport { EVENTS_COUNT_QUERY, EVENTS_QUERY } from './queries';\nimport * as dataComposed from './data';\nimport {\n NoResultsProps,\n DisplayStartProps,\n DisplayStartResultsProps,\n DisplayProps,\n} from '../_types';\n\ninterface LoadMoreProps extends DisplayProps {\n query?: string;\n}\n\ninterface CreateProps extends DisplayStartProps {\n displayResultStart: (props: DisplayStartResultsProps) => void;\n displayNoResults: (props: NoResultsProps) => void;\n query?: string;\n countQuery?: string;\n}\n\nexport const ID_GRID_LAYOUT_CONTAINER = 'umd-grid-gap-layout-container';\n\ntype TypeFetchVariables = {\n startDate?: string;\n related?: string[];\n limit?: number;\n offset?: number;\n};\n\nexport type TypeAPIFeedVariables = TypeFetchVariables & {\n token: string | null;\n};\n\ntype TypeFetchObject = TypeAPIFeedVariables & {\n query: string;\n};\n\nconst fetchFeed = async ({\n limit,\n related,\n offset,\n token,\n query,\n}: TypeFetchObject) => {\n if (!token) throw new Error('Token not found');\n\n const variables: TypeFetchVariables = {\n startDate: new Date().toDateString(),\n limit,\n related,\n offset,\n };\n\n return await fetchGraphQL({\n query,\n url: 'https://calendar.umd.edu/graphql',\n token: token,\n variables,\n });\n};\n\nconst getCount = async ({\n variables,\n query,\n}: {\n variables: TypeAPIFeedVariables;\n query?: string;\n}) => {\n const feedData = await fetchFeed({\n ...variables,\n query: query || EVENTS_COUNT_QUERY,\n });\n\n if (!feedData || !feedData.data || feedData.message) {\n if (feedData.message) console.error(feedData.message);\n return null;\n }\n\n return feedData?.data?.count?.events?.length || 0;\n};\n\nconst getEntries = async ({\n variables,\n query,\n}: {\n variables: TypeAPIFeedVariables;\n query?: string;\n}) => {\n const feedData = await fetchFeed({\n ...variables,\n query: query || EVENTS_QUERY,\n });\n const graceFail = ({ message }: { message: string }) => {\n throw new Error(message);\n };\n\n if (\n !feedData ||\n !feedData.data ||\n !feedData.data.entries ||\n feedData.message\n ) {\n if (!feedData) graceFail({ message: 'Feed not found' });\n if (!feedData.data) graceFail({ message: 'Feed data not found' });\n if (!feedData.data.entries)\n graceFail({ message: 'Feed entries not found' });\n if (!feedData.data.entries.events)\n graceFail({ message: 'Feed events not found' });\n if (!feedData.message)\n graceFail({ message: `Feed data errors: ${feedData.message}` });\n }\n\n return feedData.data.entries.events;\n};\n\nexport const load = async (props: LoadMoreProps) => {\n const { getContainer, getOffset, displayResults, getTotalEntries } = props;\n const container = getContainer();\n const currentCount = getOffset();\n const totalEntries = getTotalEntries();\n\n feedMacros.buttonLazyLoad.remove({ container });\n feedMacros.loader.display({ container });\n\n getEntries({\n variables: dataComposed.apiVariables(props),\n query: props.query,\n }).then((feedData) => {\n displayResults({ feedData });\n\n feedMacros.ariaLive.update({\n container,\n message: `Showing ${\n currentCount + feedData.length\n } of ${totalEntries} articles`,\n });\n });\n};\n\nexport const start = async (props: CreateProps) => {\n const { displayNoResults, displayResultStart, setTotalEntries } = props;\n\n await getCount({\n variables: dataComposed.apiVariables(props),\n query: props.countQuery,\n }).then((count) => {\n if (count === 0) {\n displayNoResults({ ...props });\n return;\n }\n\n if (count) {\n setTotalEntries(count);\n }\n\n if (count === null) {\n displayNoResults({\n ...props,\n message: 'An error occurred while fetching the data.',\n });\n return;\n }\n });\n\n getEntries({\n variables: dataComposed.apiVariables(props),\n query: props.query,\n }).then((feedData) => displayResultStart({ ...props, feedData }));\n};\n"],"names":["feedMacros.buttonLazyLoad","feedMacros.loader","dataComposed.apiVariables","feedMacros.ariaLive"],"mappings":"
|
|
1
|
+
{"version":3,"file":"fetch.mjs","sources":["../../../../source/composite/events/common/fetch.ts"],"sourcesContent":["import { fetchGraphQL } from '@universityofmaryland/web-utilities-library/network';\nimport * as feedMacros from 'macros';\nimport { EVENTS_COUNT_QUERY, EVENTS_QUERY } from './queries';\nimport * as dataComposed from './data';\nimport {\n NoResultsProps,\n DisplayStartProps,\n DisplayStartResultsProps,\n DisplayProps,\n} from '../_types';\n\ninterface LoadMoreProps extends DisplayProps {\n query?: string;\n}\n\ninterface CreateProps extends DisplayStartProps {\n displayResultStart: (props: DisplayStartResultsProps) => void;\n displayNoResults: (props: NoResultsProps) => void;\n query?: string;\n countQuery?: string;\n}\n\nexport const ID_GRID_LAYOUT_CONTAINER = 'umd-grid-gap-layout-container';\n\ntype TypeFetchVariables = {\n startDate?: string;\n related?: string[];\n limit?: number;\n offset?: number;\n};\n\nexport type TypeAPIFeedVariables = TypeFetchVariables & {\n token: string | null;\n};\n\ntype TypeFetchObject = TypeAPIFeedVariables & {\n query: string;\n};\n\nconst fetchFeed = async ({\n limit,\n related,\n offset,\n token,\n query,\n}: TypeFetchObject) => {\n if (!token) throw new Error('Token not found');\n\n const variables: TypeFetchVariables = {\n startDate: new Date().toDateString(),\n limit,\n related,\n offset,\n };\n\n return await fetchGraphQL({\n query,\n url: 'https://calendar.umd.edu/graphql',\n token: token,\n variables,\n });\n};\n\nconst getCount = async ({\n variables,\n query,\n}: {\n variables: TypeAPIFeedVariables;\n query?: string;\n}) => {\n const feedData = await fetchFeed({\n ...variables,\n query: query || EVENTS_COUNT_QUERY,\n });\n\n if (!feedData || !feedData.data || feedData.message) {\n if (feedData.message) console.error(feedData.message);\n return null;\n }\n\n return feedData?.data?.count?.events?.length || 0;\n};\n\nconst getEntries = async ({\n variables,\n query,\n}: {\n variables: TypeAPIFeedVariables;\n query?: string;\n}) => {\n const feedData = await fetchFeed({\n ...variables,\n query: query || EVENTS_QUERY,\n });\n const graceFail = ({ message }: { message: string }) => {\n throw new Error(message);\n };\n\n if (\n !feedData ||\n !feedData.data ||\n !feedData.data.entries ||\n feedData.message\n ) {\n if (!feedData) graceFail({ message: 'Feed not found' });\n if (!feedData.data) graceFail({ message: 'Feed data not found' });\n if (!feedData.data.entries)\n graceFail({ message: 'Feed entries not found' });\n if (!feedData.data.entries.events)\n graceFail({ message: 'Feed events not found' });\n if (!feedData.message)\n graceFail({ message: `Feed data errors: ${feedData.message}` });\n }\n\n return feedData.data.entries.events;\n};\n\nexport const load = async (props: LoadMoreProps) => {\n const { getContainer, getOffset, displayResults, getTotalEntries } = props;\n const container = getContainer();\n const currentCount = getOffset();\n const totalEntries = getTotalEntries();\n\n feedMacros.buttonLazyLoad.remove({ container });\n feedMacros.loader.display({ container });\n\n getEntries({\n variables: dataComposed.apiVariables(props),\n query: props.query,\n }).then((feedData) => {\n displayResults({ feedData });\n\n feedMacros.ariaLive.update({\n container,\n message: `Showing ${\n currentCount + feedData.length\n } of ${totalEntries} articles`,\n });\n });\n};\n\nexport const start = async (props: CreateProps) => {\n const { displayNoResults, displayResultStart, setTotalEntries } = props;\n\n await getCount({\n variables: dataComposed.apiVariables(props),\n query: props.countQuery,\n }).then((count) => {\n if (count === 0) {\n displayNoResults({ ...props });\n return;\n }\n\n if (count) {\n setTotalEntries(count);\n }\n\n if (count === null) {\n displayNoResults({\n ...props,\n message: 'An error occurred while fetching the data.',\n });\n return;\n }\n });\n\n getEntries({\n variables: dataComposed.apiVariables(props),\n query: props.query,\n }).then((feedData) => displayResultStart({ ...props, feedData }));\n};\n"],"names":["feedMacros.buttonLazyLoad","feedMacros.loader","dataComposed.apiVariables","feedMacros.ariaLive"],"mappings":"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"}
|
|
@@ -3,7 +3,9 @@ const webElementsLibrary = require("@universityofmaryland/web-elements-library")
|
|
|
3
3
|
const asset = require("../../elements/asset.js");
|
|
4
4
|
const layout = require("../../elements/layout.js");
|
|
5
5
|
require("@universityofmaryland/web-styles-library");
|
|
6
|
+
require("@universityofmaryland/web-builder-library");
|
|
6
7
|
const loader = require("../../macros/loader.js");
|
|
8
|
+
require("@universityofmaryland/web-utilities-library/theme");
|
|
7
9
|
require("@universityofmaryland/web-utilities-library/network");
|
|
8
10
|
require("@universityofmaryland/web-elements-library/composite");
|
|
9
11
|
require("@universityofmaryland/web-elements-library/atomic");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grid.js","sources":["../../../source/composite/events/grid.ts"],"sourcesContent":["import { Composite } from '@universityofmaryland/web-elements-library';\nimport * as feedElements from 'elements';\nimport * as feedMacros from 'macros';\nimport * as feedFetch from './common/fetch';\nimport * as feedDisplay from './common/display';\nimport * as dataComposed from './common/data';\nimport { type BlockProps, type FeedDisplay } from './_types';\nimport { type ElementModel } from '../../_types';\n\nexport default (props: BlockProps): ElementModel =>\n (() => {\n const { isThemeDark, isTransparent, numberOfColumnsToShow } = props;\n const loader = feedMacros.loader.create({ isThemeDark });\n const container = document.createElement('div');\n const setTotalEntries = (count: number) => (totalEntries = count);\n const setOffset = (count: number) => (offset = offset + count);\n const setStyles = (additonalStyles: string) => (styles += additonalStyles);\n const getContainer = () => container;\n const getTotalEntries = () => totalEntries;\n const getOffset = () => offset;\n const getStyles = () => styles;\n const getShadowRoot = () => shadowRoot;\n let totalEntries = 0;\n let offset = 0;\n let styles = `\n ${loader.styles}\n `;\n let shadowRoot: ShadowRoot | null = null;\n\n const helperFunctions = {\n setTotalEntries,\n setOffset,\n setStyles,\n getContainer,\n getOffset,\n getTotalEntries,\n getStyles,\n getShadowRoot,\n };\n\n const callback = (shadow: ShadowRoot) => {\n shadowRoot = shadow;\n };\n\n const displayResults = async ({ feedData }: FeedDisplay) => {\n await feedDisplay.resultLoad({\n ...props,\n ...helperFunctions,\n displayResults,\n entries: feedData.map((entry) =>\n Composite.card.block({\n ...dataComposed.display({ entry, isThemeDark }),\n image: feedElements.asset.standard({\n images: entry.image,\n url: entry.url,\n }),\n isAligned: false,\n isTransparent,\n }),\n ),\n });\n\n if (shadowRoot) {\n feedDisplay.setShadowStyles({\n shadowRoot,\n styles,\n });\n }\n };\n\n const layoutElement = feedElements.layout.gridGap({\n count: numberOfColumnsToShow,\n });\n container.appendChild(loader.element);\n\n feedFetch.start({\n ...props,\n ...helperFunctions,\n displayResults,\n displayResultStart: feedDisplay.resultStart,\n displayNoResults: feedDisplay.noResults,\n layoutElement,\n isThemeDark,\n });\n\n return {\n element: container,\n styles,\n events: {\n callback,\n },\n };\n })();\n"],"names":["loader","feedMacros.loader","feedDisplay.resultLoad","Composite","dataComposed.display","feedElements.asset.standard","feedDisplay.setShadowStyles","feedElements.layout.gridGap","feedFetch.start","feedDisplay.resultStart","feedDisplay.noResults"],"mappings":"
|
|
1
|
+
{"version":3,"file":"grid.js","sources":["../../../source/composite/events/grid.ts"],"sourcesContent":["import { Composite } from '@universityofmaryland/web-elements-library';\nimport * as feedElements from 'elements';\nimport * as feedMacros from 'macros';\nimport * as feedFetch from './common/fetch';\nimport * as feedDisplay from './common/display';\nimport * as dataComposed from './common/data';\nimport { type BlockProps, type FeedDisplay } from './_types';\nimport { type ElementModel } from '../../_types';\n\nexport default (props: BlockProps): ElementModel =>\n (() => {\n const { isThemeDark, isTransparent, numberOfColumnsToShow } = props;\n const loader = feedMacros.loader.create({ isThemeDark });\n const container = document.createElement('div');\n const setTotalEntries = (count: number) => (totalEntries = count);\n const setOffset = (count: number) => (offset = offset + count);\n const setStyles = (additonalStyles: string) => (styles += additonalStyles);\n const getContainer = () => container;\n const getTotalEntries = () => totalEntries;\n const getOffset = () => offset;\n const getStyles = () => styles;\n const getShadowRoot = () => shadowRoot;\n let totalEntries = 0;\n let offset = 0;\n let styles = `\n ${loader.styles}\n `;\n let shadowRoot: ShadowRoot | null = null;\n\n const helperFunctions = {\n setTotalEntries,\n setOffset,\n setStyles,\n getContainer,\n getOffset,\n getTotalEntries,\n getStyles,\n getShadowRoot,\n };\n\n const callback = (shadow: ShadowRoot) => {\n shadowRoot = shadow;\n };\n\n const displayResults = async ({ feedData }: FeedDisplay) => {\n await feedDisplay.resultLoad({\n ...props,\n ...helperFunctions,\n displayResults,\n entries: feedData.map((entry) =>\n Composite.card.block({\n ...dataComposed.display({ entry, isThemeDark }),\n image: feedElements.asset.standard({\n images: entry.image,\n url: entry.url,\n }),\n isAligned: false,\n isTransparent,\n }),\n ),\n });\n\n if (shadowRoot) {\n feedDisplay.setShadowStyles({\n shadowRoot,\n styles,\n });\n }\n };\n\n const layoutElement = feedElements.layout.gridGap({\n count: numberOfColumnsToShow,\n });\n container.appendChild(loader.element);\n\n feedFetch.start({\n ...props,\n ...helperFunctions,\n displayResults,\n displayResultStart: feedDisplay.resultStart,\n displayNoResults: feedDisplay.noResults,\n layoutElement,\n isThemeDark,\n });\n\n return {\n element: container,\n styles,\n events: {\n callback,\n },\n };\n })();\n"],"names":["loader","feedMacros.loader","feedDisplay.resultLoad","Composite","dataComposed.display","feedElements.asset.standard","feedDisplay.setShadowStyles","feedElements.layout.gridGap","feedFetch.start","feedDisplay.resultStart","feedDisplay.noResults"],"mappings":";;;;;;;;;;;;;;AASA,MAAA,OAAe,CAAC,WACb,MAAM;AACL,QAAM,EAAE,aAAa,eAAe,sBAAA,IAA0B;AAC9D,QAAMA,WAASC,OAAkB,OAAO,EAAE,aAAa;AACvD,QAAM,YAAY,SAAS,cAAc,KAAK;AAC9C,QAAM,kBAAkB,CAAC,UAAmB,eAAe;AAC3D,QAAM,YAAY,CAAC,UAAmB,SAAS,SAAS;AACxD,QAAM,YAAY,CAAC,oBAA6B,UAAU;AAC1D,QAAM,eAAe,MAAM;AAC3B,QAAM,kBAAkB,MAAM;AAC9B,QAAM,YAAY,MAAM;AACxB,QAAM,YAAY,MAAM;AACxB,QAAM,gBAAgB,MAAM;AAC5B,MAAI,eAAe;AACnB,MAAI,SAAS;AACb,MAAI,SAAS;AAAA,QACTD,SAAO,MAAM;AAAA;AAEjB,MAAI,aAAgC;AAEpC,QAAM,kBAAkB;AAAA,IACtB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAGF,QAAM,WAAW,CAAC,WAAuB;AACvC,iBAAa;AAAA,EACf;AAEA,QAAM,iBAAiB,OAAO,EAAE,eAA4B;AAC1D,UAAME,mBAAuB;AAAA,MAC3B,GAAG;AAAA,MACH,GAAG;AAAA,MACH;AAAA,MACA,SAAS,SAAS;AAAA,QAAI,CAAC,UACrBC,mBAAAA,UAAU,KAAK,MAAM;AAAA,UACnB,GAAGC,aAAqB,EAAE,OAAO,aAAa;AAAA,UAC9C,OAAOC,MAAAA,SAA4B;AAAA,YACjC,QAAQ,MAAM;AAAA,YACd,KAAK,MAAM;AAAA,UAAA,CACZ;AAAA,UACD,WAAW;AAAA,UACX;AAAA,QAAA,CACD;AAAA,MAAA;AAAA,IACH,CACD;AAED,QAAI,YAAY;AACdC,8BAA4B;AAAA,QAC1B;AAAA,QACA;AAAA,MAAA,CACD;AAAA,IACH;AAAA,EACF;AAEA,QAAM,gBAAgBC,OAAAA,QAA4B;AAAA,IAChD,OAAO;AAAA,EAAA,CACR;AACD,YAAU,YAAYP,SAAO,OAAO;AAEpCQ,cAAgB;AAAA,IACd,GAAG;AAAA,IACH,GAAG;AAAA,IACH;AAAA,IACA,oBAAoBC,QAAAA;AAAAA,IACpB,kBAAkBC,QAAAA;AAAAA,IAClB;AAAA,IACA;AAAA,EAAA,CACD;AAED,SAAO;AAAA,IACL,SAAS;AAAA,IACT;AAAA,IACA,QAAQ;AAAA,MACN;AAAA,IAAA;AAAA,EACF;AAEJ,GAAA;;"}
|
|
@@ -2,7 +2,9 @@ import { Composite } from "@universityofmaryland/web-elements-library";
|
|
|
2
2
|
import { standard } from "../../elements/asset.mjs";
|
|
3
3
|
import { gridGap } from "../../elements/layout.mjs";
|
|
4
4
|
import "@universityofmaryland/web-styles-library";
|
|
5
|
+
import "@universityofmaryland/web-builder-library";
|
|
5
6
|
import loader from "../../macros/loader.mjs";
|
|
7
|
+
import "@universityofmaryland/web-utilities-library/theme";
|
|
6
8
|
import "@universityofmaryland/web-utilities-library/network";
|
|
7
9
|
import "@universityofmaryland/web-elements-library/composite";
|
|
8
10
|
import "@universityofmaryland/web-elements-library/atomic";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grid.mjs","sources":["../../../source/composite/events/grid.ts"],"sourcesContent":["import { Composite } from '@universityofmaryland/web-elements-library';\nimport * as feedElements from 'elements';\nimport * as feedMacros from 'macros';\nimport * as feedFetch from './common/fetch';\nimport * as feedDisplay from './common/display';\nimport * as dataComposed from './common/data';\nimport { type BlockProps, type FeedDisplay } from './_types';\nimport { type ElementModel } from '../../_types';\n\nexport default (props: BlockProps): ElementModel =>\n (() => {\n const { isThemeDark, isTransparent, numberOfColumnsToShow } = props;\n const loader = feedMacros.loader.create({ isThemeDark });\n const container = document.createElement('div');\n const setTotalEntries = (count: number) => (totalEntries = count);\n const setOffset = (count: number) => (offset = offset + count);\n const setStyles = (additonalStyles: string) => (styles += additonalStyles);\n const getContainer = () => container;\n const getTotalEntries = () => totalEntries;\n const getOffset = () => offset;\n const getStyles = () => styles;\n const getShadowRoot = () => shadowRoot;\n let totalEntries = 0;\n let offset = 0;\n let styles = `\n ${loader.styles}\n `;\n let shadowRoot: ShadowRoot | null = null;\n\n const helperFunctions = {\n setTotalEntries,\n setOffset,\n setStyles,\n getContainer,\n getOffset,\n getTotalEntries,\n getStyles,\n getShadowRoot,\n };\n\n const callback = (shadow: ShadowRoot) => {\n shadowRoot = shadow;\n };\n\n const displayResults = async ({ feedData }: FeedDisplay) => {\n await feedDisplay.resultLoad({\n ...props,\n ...helperFunctions,\n displayResults,\n entries: feedData.map((entry) =>\n Composite.card.block({\n ...dataComposed.display({ entry, isThemeDark }),\n image: feedElements.asset.standard({\n images: entry.image,\n url: entry.url,\n }),\n isAligned: false,\n isTransparent,\n }),\n ),\n });\n\n if (shadowRoot) {\n feedDisplay.setShadowStyles({\n shadowRoot,\n styles,\n });\n }\n };\n\n const layoutElement = feedElements.layout.gridGap({\n count: numberOfColumnsToShow,\n });\n container.appendChild(loader.element);\n\n feedFetch.start({\n ...props,\n ...helperFunctions,\n displayResults,\n displayResultStart: feedDisplay.resultStart,\n displayNoResults: feedDisplay.noResults,\n layoutElement,\n isThemeDark,\n });\n\n return {\n element: container,\n styles,\n events: {\n callback,\n },\n };\n })();\n"],"names":["loader","feedMacros.loader","feedDisplay.resultLoad","dataComposed.display","feedElements.asset.standard","feedDisplay.setShadowStyles","feedElements.layout.gridGap","feedFetch.start","feedDisplay.resultStart","feedDisplay.noResults"],"mappings":"
|
|
1
|
+
{"version":3,"file":"grid.mjs","sources":["../../../source/composite/events/grid.ts"],"sourcesContent":["import { Composite } from '@universityofmaryland/web-elements-library';\nimport * as feedElements from 'elements';\nimport * as feedMacros from 'macros';\nimport * as feedFetch from './common/fetch';\nimport * as feedDisplay from './common/display';\nimport * as dataComposed from './common/data';\nimport { type BlockProps, type FeedDisplay } from './_types';\nimport { type ElementModel } from '../../_types';\n\nexport default (props: BlockProps): ElementModel =>\n (() => {\n const { isThemeDark, isTransparent, numberOfColumnsToShow } = props;\n const loader = feedMacros.loader.create({ isThemeDark });\n const container = document.createElement('div');\n const setTotalEntries = (count: number) => (totalEntries = count);\n const setOffset = (count: number) => (offset = offset + count);\n const setStyles = (additonalStyles: string) => (styles += additonalStyles);\n const getContainer = () => container;\n const getTotalEntries = () => totalEntries;\n const getOffset = () => offset;\n const getStyles = () => styles;\n const getShadowRoot = () => shadowRoot;\n let totalEntries = 0;\n let offset = 0;\n let styles = `\n ${loader.styles}\n `;\n let shadowRoot: ShadowRoot | null = null;\n\n const helperFunctions = {\n setTotalEntries,\n setOffset,\n setStyles,\n getContainer,\n getOffset,\n getTotalEntries,\n getStyles,\n getShadowRoot,\n };\n\n const callback = (shadow: ShadowRoot) => {\n shadowRoot = shadow;\n };\n\n const displayResults = async ({ feedData }: FeedDisplay) => {\n await feedDisplay.resultLoad({\n ...props,\n ...helperFunctions,\n displayResults,\n entries: feedData.map((entry) =>\n Composite.card.block({\n ...dataComposed.display({ entry, isThemeDark }),\n image: feedElements.asset.standard({\n images: entry.image,\n url: entry.url,\n }),\n isAligned: false,\n isTransparent,\n }),\n ),\n });\n\n if (shadowRoot) {\n feedDisplay.setShadowStyles({\n shadowRoot,\n styles,\n });\n }\n };\n\n const layoutElement = feedElements.layout.gridGap({\n count: numberOfColumnsToShow,\n });\n container.appendChild(loader.element);\n\n feedFetch.start({\n ...props,\n ...helperFunctions,\n displayResults,\n displayResultStart: feedDisplay.resultStart,\n displayNoResults: feedDisplay.noResults,\n layoutElement,\n isThemeDark,\n });\n\n return {\n element: container,\n styles,\n events: {\n callback,\n },\n };\n })();\n"],"names":["loader","feedMacros.loader","feedDisplay.resultLoad","dataComposed.display","feedElements.asset.standard","feedDisplay.setShadowStyles","feedElements.layout.gridGap","feedFetch.start","feedDisplay.resultStart","feedDisplay.noResults"],"mappings":";;;;;;;;;;;;;AASA,MAAA,OAAe,CAAC,WACb,MAAM;AACL,QAAM,EAAE,aAAa,eAAe,sBAAA,IAA0B;AAC9D,QAAMA,WAASC,OAAkB,OAAO,EAAE,aAAa;AACvD,QAAM,YAAY,SAAS,cAAc,KAAK;AAC9C,QAAM,kBAAkB,CAAC,UAAmB,eAAe;AAC3D,QAAM,YAAY,CAAC,UAAmB,SAAS,SAAS;AACxD,QAAM,YAAY,CAAC,oBAA6B,UAAU;AAC1D,QAAM,eAAe,MAAM;AAC3B,QAAM,kBAAkB,MAAM;AAC9B,QAAM,YAAY,MAAM;AACxB,QAAM,YAAY,MAAM;AACxB,QAAM,gBAAgB,MAAM;AAC5B,MAAI,eAAe;AACnB,MAAI,SAAS;AACb,MAAI,SAAS;AAAA,QACTD,SAAO,MAAM;AAAA;AAEjB,MAAI,aAAgC;AAEpC,QAAM,kBAAkB;AAAA,IACtB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAGF,QAAM,WAAW,CAAC,WAAuB;AACvC,iBAAa;AAAA,EACf;AAEA,QAAM,iBAAiB,OAAO,EAAE,eAA4B;AAC1D,UAAME,WAAuB;AAAA,MAC3B,GAAG;AAAA,MACH,GAAG;AAAA,MACH;AAAA,MACA,SAAS,SAAS;AAAA,QAAI,CAAC,UACrB,UAAU,KAAK,MAAM;AAAA,UACnB,GAAGC,QAAqB,EAAE,OAAO,aAAa;AAAA,UAC9C,OAAOC,SAA4B;AAAA,YACjC,QAAQ,MAAM;AAAA,YACd,KAAK,MAAM;AAAA,UAAA,CACZ;AAAA,UACD,WAAW;AAAA,UACX;AAAA,QAAA,CACD;AAAA,MAAA;AAAA,IACH,CACD;AAED,QAAI,YAAY;AACdC,sBAA4B;AAAA,QAC1B;AAAA,QACA;AAAA,MAAA,CACD;AAAA,IACH;AAAA,EACF;AAEA,QAAM,gBAAgBC,QAA4B;AAAA,IAChD,OAAO;AAAA,EAAA,CACR;AACD,YAAU,YAAYN,SAAO,OAAO;AAEpCO,QAAgB;AAAA,IACd,GAAG;AAAA,IACH,GAAG;AAAA,IACH;AAAA,IACA,oBAAoBC;AAAAA,IACpB,kBAAkBC;AAAAA,IAClB;AAAA,IACA;AAAA,EAAA,CACD;AAED,SAAO;AAAA,IACL,SAAS;AAAA,IACT;AAAA,IACA,QAAQ;AAAA,MACN;AAAA,IAAA;AAAA,EACF;AAEJ,GAAA;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grouped.d.ts","sourceRoot":"","sources":["../../../source/composite/events/grouped.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"grouped.d.ts","sourceRoot":"","sources":["../../../source/composite/events/grouped.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,KAAK,SAAS,EAAoC,MAAM,UAAU,CAAC;AAC5E,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;yBAwLjC,OAAO,SAAS,KAAG,YAAY;AAA/C,wBA8JO"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
const Styles = require("@universityofmaryland/web-styles-library");
|
|
3
|
+
const webBuilderLibrary = require("@universityofmaryland/web-builder-library");
|
|
3
4
|
const webElementsLibrary = require("@universityofmaryland/web-elements-library");
|
|
4
5
|
const asset = require("../../elements/asset.js");
|
|
5
6
|
const loader = require("../../macros/loader.js");
|
|
7
|
+
require("@universityofmaryland/web-utilities-library/theme");
|
|
6
8
|
require("@universityofmaryland/web-utilities-library/network");
|
|
7
9
|
require("@universityofmaryland/web-elements-library/composite");
|
|
8
10
|
require("@universityofmaryland/web-elements-library/atomic");
|
|
@@ -196,12 +198,7 @@ const grouped = (props) => (() => {
|
|
|
196
198
|
shadowRoot = shadow;
|
|
197
199
|
};
|
|
198
200
|
const groupLayout = () => {
|
|
199
|
-
return
|
|
200
|
-
className: "umd-feed-events-grouped",
|
|
201
|
-
elementStyles: {
|
|
202
|
-
element: {}
|
|
203
|
-
}
|
|
204
|
-
});
|
|
201
|
+
return new webBuilderLibrary.ElementBuilder().withClassName("umd-feed-events-grouped").build();
|
|
205
202
|
};
|
|
206
203
|
const displayResults = async ({ feedData }) => {
|
|
207
204
|
const groupedEvents = groupEventsByDate(feedData);
|
|
@@ -212,14 +209,11 @@ const grouped = (props) => (() => {
|
|
|
212
209
|
const dateHeadline = document.createElement("p");
|
|
213
210
|
dateHeadline.textContent = group.date;
|
|
214
211
|
entries.push(
|
|
215
|
-
|
|
216
|
-
element:
|
|
217
|
-
|
|
218
|
-
element: {
|
|
219
|
-
margin: `${Styles__namespace.token.spacing.lg} 0`
|
|
220
|
-
}
|
|
212
|
+
new webBuilderLibrary.ElementBuilder(dateHeadline).styled(Styles__namespace.element.text.decoration.ribbon).withStyles({
|
|
213
|
+
element: {
|
|
214
|
+
margin: `${Styles__namespace.token.spacing.lg} 0`
|
|
221
215
|
}
|
|
222
|
-
})
|
|
216
|
+
}).build()
|
|
223
217
|
);
|
|
224
218
|
lastDateHeadline = group.date;
|
|
225
219
|
}
|
|
@@ -239,26 +233,22 @@ const grouped = (props) => (() => {
|
|
|
239
233
|
})
|
|
240
234
|
);
|
|
241
235
|
actualEventCount += group.events.length;
|
|
242
|
-
entries.
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
[`+ .umd-feed-events-grouped-entries`]: {
|
|
254
|
-
paddingTop: Styles__namespace.token.spacing.md,
|
|
255
|
-
marginTop: Styles__namespace.token.spacing.md,
|
|
256
|
-
borderTop: `1px solid ${isThemeDark ? Styles__namespace.token.color.gray.dark : Styles__namespace.token.color.gray.light}`
|
|
257
|
-
}
|
|
258
|
-
}
|
|
236
|
+
const entriesBuilder = new webBuilderLibrary.ElementBuilder().withClassName("umd-feed-events-grouped-entries").withStyles({
|
|
237
|
+
element: {
|
|
238
|
+
[` > *:not(:last-child)`]: {
|
|
239
|
+
paddingBottom: Styles__namespace.token.spacing.md,
|
|
240
|
+
marginBottom: Styles__namespace.token.spacing.md,
|
|
241
|
+
borderBottom: `1px solid ${isThemeDark ? Styles__namespace.token.color.gray.dark : Styles__namespace.token.color.gray.light}`
|
|
242
|
+
},
|
|
243
|
+
[`+ .umd-feed-events-grouped-entries`]: {
|
|
244
|
+
paddingTop: Styles__namespace.token.spacing.md,
|
|
245
|
+
marginTop: Styles__namespace.token.spacing.md,
|
|
246
|
+
borderTop: `1px solid ${isThemeDark ? Styles__namespace.token.color.gray.dark : Styles__namespace.token.color.gray.light}`
|
|
259
247
|
}
|
|
260
|
-
}
|
|
261
|
-
);
|
|
248
|
+
}
|
|
249
|
+
});
|
|
250
|
+
dateEntries.forEach((entry) => entriesBuilder.withChild(entry));
|
|
251
|
+
entries.push(entriesBuilder.build());
|
|
262
252
|
});
|
|
263
253
|
const originalSetOffset = helperFunctions.setOffset;
|
|
264
254
|
helperFunctions.setOffset = () => originalSetOffset(actualEventCount);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grouped.js","sources":["../../../source/composite/events/grouped.ts"],"sourcesContent":["import * as Styles from '@universityofmaryland/web-styles-library';\nimport {\n Atomic,\n Composite,\n Model,\n} from '@universityofmaryland/web-elements-library';\nimport * as feedElements from 'elements';\nimport * as feedMacros from 'macros';\nimport * as feedFetch from './common/fetch';\nimport * as feedDisplay from './common/display';\nimport * as dataComposed from './common/data';\nimport { EVENTS_RANGE_QUERY, EVENTS_COUNT_RANGE_QUERY } from './common/queries';\nimport { type ListProps, type FeedDisplay, type EventType } from './_types';\nimport { type ElementModel } from '../../_types';\n\ninterface GroupedEvent {\n date: string;\n events: EventType[];\n}\n\nconst getDateBanner = (dateStamp: string): string => {\n // Parse the date string more reliably\n // Handle both \"YYYY-MM-DD\" and ISO format strings\n const dateParts = dateStamp.split('T')[0].split('-');\n const year = parseInt(dateParts[0], 10);\n const month = parseInt(dateParts[1], 10) - 1; // Month is 0-indexed\n const day = parseInt(dateParts[2], 10);\n\n // Create dates using local timezone to avoid timezone shifts\n const eventDate = new Date(year, month, day);\n const currentDate = new Date();\n currentDate.setHours(0, 0, 0, 0);\n\n const weekFromNow = new Date();\n weekFromNow.setDate(currentDate.getDate() + 7);\n weekFromNow.setHours(0, 0, 0, 0);\n\n // Check if it's today\n if (\n eventDate.getFullYear() === currentDate.getFullYear() &&\n eventDate.getMonth() === currentDate.getMonth() &&\n eventDate.getDate() === currentDate.getDate()\n ) {\n return 'Today';\n }\n\n // Check if it's within the next 7 days\n if (\n eventDate.getTime() > currentDate.getTime() &&\n eventDate.getTime() <= weekFromNow.getTime()\n ) {\n const days = [\n 'Sunday',\n 'Monday',\n 'Tuesday',\n 'Wednesday',\n 'Thursday',\n 'Friday',\n 'Saturday',\n ];\n return days[eventDate.getDay()];\n }\n\n // Otherwise return day of week, month and day\n const days = [\n 'Sunday',\n 'Monday',\n 'Tuesday',\n 'Wednesday',\n 'Thursday',\n 'Friday',\n 'Saturday',\n ];\n const months = [\n 'Jan',\n 'Feb',\n 'Mar',\n 'Apr',\n 'May',\n 'Jun',\n 'Jul',\n 'Aug',\n 'Sep',\n 'Oct',\n 'Nov',\n 'Dec',\n ];\n return `${days[eventDate.getDay()]}, ${\n months[eventDate.getMonth()]\n } ${eventDate.getDate()}`;\n};\n\nconst MONTH_MAP: Record<string, string> = {\n Jan: '01',\n Feb: '02',\n Mar: '03',\n Apr: '04',\n May: '05',\n Jun: '06',\n Jul: '07',\n Aug: '08',\n Sep: '09',\n Oct: '10',\n Nov: '11',\n Dec: '12',\n};\n\nconst parseLocalDate = (dateString: string): Date => {\n const parts = dateString.split('-');\n const date = new Date(\n parseInt(parts[0], 10),\n parseInt(parts[1], 10) - 1,\n parseInt(parts[2], 10),\n );\n date.setHours(0, 0, 0, 0);\n return date;\n};\n\nconst getEventStartDate = (event: EventType): Date => {\n return parseLocalDate(event.startStamp.split('T')[0]);\n};\n\nconst isMultiDayEvent = (event: EventType): boolean => {\n const startParts = event.startStamp.split('T')[0].split('-');\n const startMonth = startParts[1];\n const startDay = startParts[2];\n const endMonth = MONTH_MAP[event.endMonth];\n const endDay = event.endDay.padStart(2, '0');\n\n return !(startMonth === endMonth && startDay === endDay);\n};\n\nconst eventStartsOnDate = (event: EventType, targetDate: Date): boolean => {\n const eventStartDate = getEventStartDate(event);\n return eventStartDate.getTime() === targetDate.getTime();\n};\n\nconst getEventPriority = (event: EventType, groupDate: Date): number => {\n const isMulti = isMultiDayEvent(event);\n const startsOnDate = eventStartsOnDate(event, groupDate);\n\n if (isMulti && startsOnDate) return 1;\n if (!isMulti) return 2;\n return 3;\n};\n\nconst sortEventsByPriority = (\n events: EventType[],\n groupDate: Date,\n): EventType[] => {\n return [...events].sort((a, b) => {\n const aPriority = getEventPriority(a, groupDate);\n const bPriority = getEventPriority(b, groupDate);\n return aPriority - bPriority;\n });\n};\n\nconst groupEventsByDate = (events: EventType[]): GroupedEvent[] => {\n const currentDate = new Date();\n currentDate.setHours(0, 0, 0, 0);\n\n const grouped = events.reduce((acc, event) => {\n const eventDate = getEventStartDate(event);\n const dateKey =\n eventDate < currentDate\n ? currentDate.toISOString().split('T')[0]\n : event.startStamp;\n\n if (!acc[dateKey]) {\n acc[dateKey] = {\n date: getDateBanner(dateKey),\n events: [],\n };\n }\n acc[dateKey].events.push(event);\n return acc;\n }, {} as Record<string, GroupedEvent>);\n\n Object.keys(grouped).forEach((dateKey) => {\n const groupDate = parseLocalDate(dateKey);\n grouped[dateKey].events = sortEventsByPriority(\n grouped[dateKey].events,\n groupDate,\n );\n });\n\n return Object.values(grouped).sort((a, b) => {\n const dateA = new Date(\n Object.keys(grouped).find((key) => grouped[key] === a) || '',\n );\n const dateB = new Date(\n Object.keys(grouped).find((key) => grouped[key] === b) || '',\n );\n return dateA.getTime() - dateB.getTime();\n });\n};\n\nexport default (props: ListProps): ElementModel =>\n (() => {\n const { isThemeDark } = props;\n const loader = feedMacros.loader.create({ isThemeDark });\n const container = document.createElement('div');\n const setTotalEntries = (count: number) => (totalEntries = count);\n const setOffset = (count: number) => (offset = offset + count);\n const setStyles = (additonalStyles: string) => (styles += additonalStyles);\n const getContainer = () => container;\n const getTotalEntries = () => totalEntries;\n const getOffset = () => offset;\n const getStyles = () => styles;\n const getShadowRoot = () => shadowRoot;\n let totalEntries = 0;\n let offset = 0;\n let styles = `\n ${loader.styles}\n `;\n let shadowRoot: ShadowRoot | null = null;\n let lastDateHeadline: string | null = null;\n\n const helperFunctions = {\n setTotalEntries,\n setOffset,\n setStyles,\n getContainer,\n getOffset,\n getTotalEntries,\n getStyles,\n getShadowRoot,\n };\n\n const callback = (shadow: ShadowRoot) => {\n shadowRoot = shadow;\n };\n\n const groupLayout = (): { element: HTMLElement; styles: string } => {\n return Model.ElementModel.createDiv({\n className: 'umd-feed-events-grouped',\n elementStyles: {\n element: {},\n },\n });\n };\n\n const displayResults = async ({ feedData }: FeedDisplay) => {\n const groupedEvents = groupEventsByDate(feedData);\n const entries: { element: HTMLElement; styles: string }[] = [];\n let actualEventCount = 0;\n\n groupedEvents.forEach((group) => {\n if (group.date !== lastDateHeadline) {\n const dateHeadline = document.createElement('p');\n dateHeadline.textContent = group.date;\n\n entries.push(\n Model.ElementModel.text.ribbon({\n element: dateHeadline,\n elementStyles: {\n element: {\n margin: `${Styles.token.spacing.lg} 0`,\n },\n },\n }),\n );\n\n lastDateHeadline = group.date;\n }\n\n const dateEntries = group.events.map((entry) =>\n Composite.card.list({\n ...dataComposed.display({ entry, isThemeDark }),\n dateSign: Atomic.events.sign({\n ...entry,\n isThemeDark,\n isLargeSize: true,\n }),\n image: feedElements.asset.standard({\n images: entry.image,\n url: entry.url,\n }),\n isAligned: false,\n }),\n );\n\n actualEventCount += group.events.length;\n\n entries.push(\n Model.ElementModel.createDiv({\n className: 'umd-feed-events-grouped-entries',\n children: [...dateEntries],\n elementStyles: {\n element: {\n [` > *:not(:last-child)`]: {\n paddingBottom: Styles.token.spacing.md,\n marginBottom: Styles.token.spacing.md,\n borderBottom: `1px solid ${\n isThemeDark\n ? Styles.token.color.gray.dark\n : Styles.token.color.gray.light\n }`,\n },\n\n [`+ .umd-feed-events-grouped-entries`]: {\n paddingTop: Styles.token.spacing.md,\n marginTop: Styles.token.spacing.md,\n borderTop: `1px solid ${\n isThemeDark\n ? Styles.token.color.gray.dark\n : Styles.token.color.gray.light\n }`,\n },\n },\n },\n }),\n );\n });\n\n // Override the offset with actual event count to fix lazy load\n const originalSetOffset = helperFunctions.setOffset;\n helperFunctions.setOffset = () => originalSetOffset(actualEventCount);\n\n await feedDisplay.resultLoad({\n ...props,\n ...helperFunctions,\n displayResults,\n entries,\n query: EVENTS_RANGE_QUERY,\n });\n\n // Restore original setOffset\n helperFunctions.setOffset = originalSetOffset;\n\n if (shadowRoot) {\n feedDisplay.setShadowStyles({\n shadowRoot,\n styles,\n });\n }\n };\n\n container.appendChild(loader.element);\n\n feedFetch.start({\n ...props,\n ...helperFunctions,\n displayResults,\n displayResultStart: feedDisplay.resultStart,\n displayNoResults: feedDisplay.noResults,\n layoutElement: groupLayout(),\n query: EVENTS_RANGE_QUERY,\n countQuery: EVENTS_COUNT_RANGE_QUERY,\n });\n\n return {\n element: container,\n styles,\n events: {\n callback,\n },\n };\n })();\n"],"names":["days","grouped","loader","feedMacros.loader","Model","Styles","Composite","dataComposed.display","Atomic","feedElements.asset.standard","feedDisplay.resultLoad","EVENTS_RANGE_QUERY","feedDisplay.setShadowStyles","feedFetch.start","feedDisplay.resultStart","feedDisplay.noResults","EVENTS_COUNT_RANGE_QUERY"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"grouped.js","sources":["../../../source/composite/events/grouped.ts"],"sourcesContent":["import * as Styles from '@universityofmaryland/web-styles-library';\nimport { ElementBuilder } from '@universityofmaryland/web-builder-library';\nimport { Atomic, Composite } from '@universityofmaryland/web-elements-library';\nimport * as feedElements from 'elements';\nimport * as feedMacros from 'macros';\nimport * as feedFetch from './common/fetch';\nimport * as feedDisplay from './common/display';\nimport * as dataComposed from './common/data';\nimport { EVENTS_RANGE_QUERY, EVENTS_COUNT_RANGE_QUERY } from './common/queries';\nimport { type ListProps, type FeedDisplay, type EventType } from './_types';\nimport { type ElementModel } from '../../_types';\n\ninterface GroupedEvent {\n date: string;\n events: EventType[];\n}\n\nconst getDateBanner = (dateStamp: string): string => {\n // Parse the date string more reliably\n // Handle both \"YYYY-MM-DD\" and ISO format strings\n const dateParts = dateStamp.split('T')[0].split('-');\n const year = parseInt(dateParts[0], 10);\n const month = parseInt(dateParts[1], 10) - 1; // Month is 0-indexed\n const day = parseInt(dateParts[2], 10);\n\n // Create dates using local timezone to avoid timezone shifts\n const eventDate = new Date(year, month, day);\n const currentDate = new Date();\n currentDate.setHours(0, 0, 0, 0);\n\n const weekFromNow = new Date();\n weekFromNow.setDate(currentDate.getDate() + 7);\n weekFromNow.setHours(0, 0, 0, 0);\n\n // Check if it's today\n if (\n eventDate.getFullYear() === currentDate.getFullYear() &&\n eventDate.getMonth() === currentDate.getMonth() &&\n eventDate.getDate() === currentDate.getDate()\n ) {\n return 'Today';\n }\n\n // Check if it's within the next 7 days\n if (\n eventDate.getTime() > currentDate.getTime() &&\n eventDate.getTime() <= weekFromNow.getTime()\n ) {\n const days = [\n 'Sunday',\n 'Monday',\n 'Tuesday',\n 'Wednesday',\n 'Thursday',\n 'Friday',\n 'Saturday',\n ];\n return days[eventDate.getDay()];\n }\n\n // Otherwise return day of week, month and day\n const days = [\n 'Sunday',\n 'Monday',\n 'Tuesday',\n 'Wednesday',\n 'Thursday',\n 'Friday',\n 'Saturday',\n ];\n const months = [\n 'Jan',\n 'Feb',\n 'Mar',\n 'Apr',\n 'May',\n 'Jun',\n 'Jul',\n 'Aug',\n 'Sep',\n 'Oct',\n 'Nov',\n 'Dec',\n ];\n return `${days[eventDate.getDay()]}, ${\n months[eventDate.getMonth()]\n } ${eventDate.getDate()}`;\n};\n\nconst MONTH_MAP: Record<string, string> = {\n Jan: '01',\n Feb: '02',\n Mar: '03',\n Apr: '04',\n May: '05',\n Jun: '06',\n Jul: '07',\n Aug: '08',\n Sep: '09',\n Oct: '10',\n Nov: '11',\n Dec: '12',\n};\n\nconst parseLocalDate = (dateString: string): Date => {\n const parts = dateString.split('-');\n const date = new Date(\n parseInt(parts[0], 10),\n parseInt(parts[1], 10) - 1,\n parseInt(parts[2], 10),\n );\n date.setHours(0, 0, 0, 0);\n return date;\n};\n\nconst getEventStartDate = (event: EventType): Date => {\n return parseLocalDate(event.startStamp.split('T')[0]);\n};\n\nconst isMultiDayEvent = (event: EventType): boolean => {\n const startParts = event.startStamp.split('T')[0].split('-');\n const startMonth = startParts[1];\n const startDay = startParts[2];\n const endMonth = MONTH_MAP[event.endMonth];\n const endDay = event.endDay.padStart(2, '0');\n\n return !(startMonth === endMonth && startDay === endDay);\n};\n\nconst eventStartsOnDate = (event: EventType, targetDate: Date): boolean => {\n const eventStartDate = getEventStartDate(event);\n return eventStartDate.getTime() === targetDate.getTime();\n};\n\nconst getEventPriority = (event: EventType, groupDate: Date): number => {\n const isMulti = isMultiDayEvent(event);\n const startsOnDate = eventStartsOnDate(event, groupDate);\n\n if (isMulti && startsOnDate) return 1;\n if (!isMulti) return 2;\n return 3;\n};\n\nconst sortEventsByPriority = (\n events: EventType[],\n groupDate: Date,\n): EventType[] => {\n return [...events].sort((a, b) => {\n const aPriority = getEventPriority(a, groupDate);\n const bPriority = getEventPriority(b, groupDate);\n return aPriority - bPriority;\n });\n};\n\nconst groupEventsByDate = (events: EventType[]): GroupedEvent[] => {\n const currentDate = new Date();\n currentDate.setHours(0, 0, 0, 0);\n\n const grouped = events.reduce((acc, event) => {\n const eventDate = getEventStartDate(event);\n const dateKey =\n eventDate < currentDate\n ? currentDate.toISOString().split('T')[0]\n : event.startStamp;\n\n if (!acc[dateKey]) {\n acc[dateKey] = {\n date: getDateBanner(dateKey),\n events: [],\n };\n }\n acc[dateKey].events.push(event);\n return acc;\n }, {} as Record<string, GroupedEvent>);\n\n Object.keys(grouped).forEach((dateKey) => {\n const groupDate = parseLocalDate(dateKey);\n grouped[dateKey].events = sortEventsByPriority(\n grouped[dateKey].events,\n groupDate,\n );\n });\n\n return Object.values(grouped).sort((a, b) => {\n const dateA = new Date(\n Object.keys(grouped).find((key) => grouped[key] === a) || '',\n );\n const dateB = new Date(\n Object.keys(grouped).find((key) => grouped[key] === b) || '',\n );\n return dateA.getTime() - dateB.getTime();\n });\n};\n\nexport default (props: ListProps): ElementModel =>\n (() => {\n const { isThemeDark } = props;\n const loader = feedMacros.loader.create({ isThemeDark });\n const container = document.createElement('div');\n const setTotalEntries = (count: number) => (totalEntries = count);\n const setOffset = (count: number) => (offset = offset + count);\n const setStyles = (additonalStyles: string) => (styles += additonalStyles);\n const getContainer = () => container;\n const getTotalEntries = () => totalEntries;\n const getOffset = () => offset;\n const getStyles = () => styles;\n const getShadowRoot = () => shadowRoot;\n let totalEntries = 0;\n let offset = 0;\n let styles = `\n ${loader.styles}\n `;\n let shadowRoot: ShadowRoot | null = null;\n let lastDateHeadline: string | null = null;\n\n const helperFunctions = {\n setTotalEntries,\n setOffset,\n setStyles,\n getContainer,\n getOffset,\n getTotalEntries,\n getStyles,\n getShadowRoot,\n };\n\n const callback = (shadow: ShadowRoot) => {\n shadowRoot = shadow;\n };\n\n const groupLayout = (): ElementModel => {\n return new ElementBuilder()\n .withClassName('umd-feed-events-grouped')\n .build();\n };\n\n const displayResults = async ({ feedData }: FeedDisplay) => {\n const groupedEvents = groupEventsByDate(feedData);\n const entries: ElementModel[] = [];\n let actualEventCount = 0;\n\n groupedEvents.forEach((group) => {\n if (group.date !== lastDateHeadline) {\n const dateHeadline = document.createElement('p');\n dateHeadline.textContent = group.date;\n\n entries.push(\n new ElementBuilder(dateHeadline)\n .styled(Styles.element.text.decoration.ribbon)\n .withStyles({\n element: {\n margin: `${Styles.token.spacing.lg} 0`,\n },\n })\n .build(),\n );\n\n lastDateHeadline = group.date;\n }\n\n const dateEntries = group.events.map((entry) =>\n Composite.card.list({\n ...dataComposed.display({ entry, isThemeDark }),\n dateSign: Atomic.events.sign({\n ...entry,\n isThemeDark,\n isLargeSize: true,\n }),\n image: feedElements.asset.standard({\n images: entry.image,\n url: entry.url,\n }),\n isAligned: false,\n }),\n );\n\n actualEventCount += group.events.length;\n\n const entriesBuilder = new ElementBuilder()\n .withClassName('umd-feed-events-grouped-entries')\n .withStyles({\n element: {\n [` > *:not(:last-child)`]: {\n paddingBottom: Styles.token.spacing.md,\n marginBottom: Styles.token.spacing.md,\n borderBottom: `1px solid ${\n isThemeDark\n ? Styles.token.color.gray.dark\n : Styles.token.color.gray.light\n }`,\n },\n\n [`+ .umd-feed-events-grouped-entries`]: {\n paddingTop: Styles.token.spacing.md,\n marginTop: Styles.token.spacing.md,\n borderTop: `1px solid ${\n isThemeDark\n ? Styles.token.color.gray.dark\n : Styles.token.color.gray.light\n }`,\n },\n },\n });\n\n dateEntries.forEach((entry) => entriesBuilder.withChild(entry));\n\n entries.push(entriesBuilder.build());\n });\n\n // Override the offset with actual event count to fix lazy load\n const originalSetOffset = helperFunctions.setOffset;\n helperFunctions.setOffset = () => originalSetOffset(actualEventCount);\n\n await feedDisplay.resultLoad({\n ...props,\n ...helperFunctions,\n displayResults,\n entries,\n query: EVENTS_RANGE_QUERY,\n });\n\n // Restore original setOffset\n helperFunctions.setOffset = originalSetOffset;\n\n if (shadowRoot) {\n feedDisplay.setShadowStyles({\n shadowRoot,\n styles,\n });\n }\n };\n\n container.appendChild(loader.element);\n\n feedFetch.start({\n ...props,\n ...helperFunctions,\n displayResults,\n displayResultStart: feedDisplay.resultStart,\n displayNoResults: feedDisplay.noResults,\n layoutElement: groupLayout(),\n query: EVENTS_RANGE_QUERY,\n countQuery: EVENTS_COUNT_RANGE_QUERY,\n });\n\n return {\n element: container,\n styles,\n events: {\n callback,\n },\n };\n })();\n"],"names":["days","grouped","loader","feedMacros.loader","ElementBuilder","Styles","Composite","dataComposed.display","Atomic","feedElements.asset.standard","feedDisplay.resultLoad","EVENTS_RANGE_QUERY","feedDisplay.setShadowStyles","feedFetch.start","feedDisplay.resultStart","feedDisplay.noResults","EVENTS_COUNT_RANGE_QUERY"],"mappings":"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"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import * as Styles from "@universityofmaryland/web-styles-library";
|
|
2
|
-
import {
|
|
2
|
+
import { ElementBuilder } from "@universityofmaryland/web-builder-library";
|
|
3
|
+
import { Composite, Atomic } from "@universityofmaryland/web-elements-library";
|
|
3
4
|
import { standard } from "../../elements/asset.mjs";
|
|
4
5
|
import loader from "../../macros/loader.mjs";
|
|
6
|
+
import "@universityofmaryland/web-utilities-library/theme";
|
|
5
7
|
import "@universityofmaryland/web-utilities-library/network";
|
|
6
8
|
import "@universityofmaryland/web-elements-library/composite";
|
|
7
9
|
import "@universityofmaryland/web-elements-library/atomic";
|
|
@@ -178,12 +180,7 @@ const grouped = (props) => (() => {
|
|
|
178
180
|
shadowRoot = shadow;
|
|
179
181
|
};
|
|
180
182
|
const groupLayout = () => {
|
|
181
|
-
return
|
|
182
|
-
className: "umd-feed-events-grouped",
|
|
183
|
-
elementStyles: {
|
|
184
|
-
element: {}
|
|
185
|
-
}
|
|
186
|
-
});
|
|
183
|
+
return new ElementBuilder().withClassName("umd-feed-events-grouped").build();
|
|
187
184
|
};
|
|
188
185
|
const displayResults = async ({ feedData }) => {
|
|
189
186
|
const groupedEvents = groupEventsByDate(feedData);
|
|
@@ -194,14 +191,11 @@ const grouped = (props) => (() => {
|
|
|
194
191
|
const dateHeadline = document.createElement("p");
|
|
195
192
|
dateHeadline.textContent = group.date;
|
|
196
193
|
entries.push(
|
|
197
|
-
|
|
198
|
-
element:
|
|
199
|
-
|
|
200
|
-
element: {
|
|
201
|
-
margin: `${Styles.token.spacing.lg} 0`
|
|
202
|
-
}
|
|
194
|
+
new ElementBuilder(dateHeadline).styled(Styles.element.text.decoration.ribbon).withStyles({
|
|
195
|
+
element: {
|
|
196
|
+
margin: `${Styles.token.spacing.lg} 0`
|
|
203
197
|
}
|
|
204
|
-
})
|
|
198
|
+
}).build()
|
|
205
199
|
);
|
|
206
200
|
lastDateHeadline = group.date;
|
|
207
201
|
}
|
|
@@ -221,26 +215,22 @@ const grouped = (props) => (() => {
|
|
|
221
215
|
})
|
|
222
216
|
);
|
|
223
217
|
actualEventCount += group.events.length;
|
|
224
|
-
entries.
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
[`+ .umd-feed-events-grouped-entries`]: {
|
|
236
|
-
paddingTop: Styles.token.spacing.md,
|
|
237
|
-
marginTop: Styles.token.spacing.md,
|
|
238
|
-
borderTop: `1px solid ${isThemeDark ? Styles.token.color.gray.dark : Styles.token.color.gray.light}`
|
|
239
|
-
}
|
|
240
|
-
}
|
|
218
|
+
const entriesBuilder = new ElementBuilder().withClassName("umd-feed-events-grouped-entries").withStyles({
|
|
219
|
+
element: {
|
|
220
|
+
[` > *:not(:last-child)`]: {
|
|
221
|
+
paddingBottom: Styles.token.spacing.md,
|
|
222
|
+
marginBottom: Styles.token.spacing.md,
|
|
223
|
+
borderBottom: `1px solid ${isThemeDark ? Styles.token.color.gray.dark : Styles.token.color.gray.light}`
|
|
224
|
+
},
|
|
225
|
+
[`+ .umd-feed-events-grouped-entries`]: {
|
|
226
|
+
paddingTop: Styles.token.spacing.md,
|
|
227
|
+
marginTop: Styles.token.spacing.md,
|
|
228
|
+
borderTop: `1px solid ${isThemeDark ? Styles.token.color.gray.dark : Styles.token.color.gray.light}`
|
|
241
229
|
}
|
|
242
|
-
}
|
|
243
|
-
);
|
|
230
|
+
}
|
|
231
|
+
});
|
|
232
|
+
dateEntries.forEach((entry) => entriesBuilder.withChild(entry));
|
|
233
|
+
entries.push(entriesBuilder.build());
|
|
244
234
|
});
|
|
245
235
|
const originalSetOffset = helperFunctions.setOffset;
|
|
246
236
|
helperFunctions.setOffset = () => originalSetOffset(actualEventCount);
|