@smart_links/blogs 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,18 @@
1
+ import React from 'react';
2
+ import { type SmartLinksBlogsStrings, type SmartLinksScreenProps } from '@smart_links/core';
3
+ type BlogPost = {
4
+ id?: number;
5
+ title?: string;
6
+ slug?: string;
7
+ excerpt?: string;
8
+ content?: string;
9
+ };
10
+ export type BlogsScreenProps = SmartLinksScreenProps & {
11
+ strings?: Partial<SmartLinksBlogsStrings>;
12
+ page?: number;
13
+ renderPostItem?: (post: BlogPost, onPress: () => void) => React.ReactElement | null;
14
+ onPostOpen?: (post: BlogPost) => void;
15
+ };
16
+ export declare function BlogsScreen({ style, contentContainerStyle, testID, safeAreaEdges, strings: stringOverrides, page, renderPostItem, onPostOpen, }?: BlogsScreenProps): React.JSX.Element;
17
+ export { BlogsScreen as SmartLinksBlogsScreen };
18
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAuC,MAAM,OAAO,CAAC;AAS5D,OAAO,EAML,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC3B,MAAM,mBAAmB,CAAC;AAE3B,KAAK,QAAQ,GAAG;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,qBAAqB,GAAG;IACrD,OAAO,CAAC,EAAE,OAAO,CAAC,sBAAsB,CAAC,CAAC;IAC1C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,IAAI,KAAK,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC;IACpF,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;CACvC,CAAC;AAEF,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,qBAAqB,EACrB,MAAM,EACN,aAAiC,EACjC,OAAO,EAAE,eAAe,EACxB,IAAQ,EACR,cAAc,EACd,UAAU,GACX,GAAE,gBAAqB,qBA8EvB;AAED,OAAO,EAAE,WAAW,IAAI,qBAAqB,EAAE,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,39 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect, useMemo, useState } from 'react';
3
+ import { ActivityIndicator, FlatList, Pressable, ScrollView, Text, View, } from 'react-native';
4
+ import { SmartLinksApi, SmartLinksCore, SmartLinksSafeArea, createThemedStyles, getSmartLinksCustomization, } from '@smart_links/core';
5
+ export function BlogsScreen({ style, contentContainerStyle, testID, safeAreaEdges = ['top', 'bottom'], strings: stringOverrides, page = 1, renderPostItem, onPostOpen, } = {}) {
6
+ const { theme, locale } = getSmartLinksCustomization();
7
+ const styles = useMemo(() => createThemedStyles(theme), [theme]);
8
+ const strings = { ...locale.blogs, ...stringOverrides };
9
+ const [posts, setPosts] = useState([]);
10
+ const [selected, setSelected] = useState(null);
11
+ const [loading, setLoading] = useState(true);
12
+ useEffect(() => {
13
+ SmartLinksCore.requireInitialized();
14
+ SmartLinksApi.getBlogs(page)
15
+ .then((data) => {
16
+ const list = data.data ?? data;
17
+ setPosts(Array.isArray(list) ? list : []);
18
+ })
19
+ .finally(() => setLoading(false));
20
+ }, [page]);
21
+ const openPost = async (post) => {
22
+ onPostOpen?.(post);
23
+ if (!post.slug) {
24
+ setSelected(post);
25
+ return;
26
+ }
27
+ const detail = await SmartLinksApi.getBlogPost(post.slug);
28
+ setSelected({ ...post, ...detail });
29
+ };
30
+ if (loading) {
31
+ return (_jsx(SmartLinksSafeArea, { style: style, edges: safeAreaEdges, children: _jsx(View, { style: styles.center, testID: testID, children: _jsx(ActivityIndicator, { color: theme.colors.primary }) }) }));
32
+ }
33
+ if (selected) {
34
+ return (_jsx(SmartLinksSafeArea, { style: style, edges: safeAreaEdges, children: _jsxs(ScrollView, { contentContainerStyle: [styles.screen, contentContainerStyle], testID: testID, children: [_jsx(Pressable, { onPress: () => setSelected(null), children: _jsx(Text, { style: styles.link, children: strings.back }) }), _jsx(Text, { style: styles.title, children: selected.title }), _jsx(Text, { style: styles.body, children: selected.content ?? selected.excerpt })] }) }));
35
+ }
36
+ return (_jsx(SmartLinksSafeArea, { style: style, edges: safeAreaEdges, children: _jsx(FlatList, { contentContainerStyle: [styles.screen, contentContainerStyle], testID: testID, data: posts, keyExtractor: (item, index) => String(item.id ?? item.slug ?? index), renderItem: ({ item }) => renderPostItem ? (renderPostItem(item, () => openPost(item))) : (_jsxs(Pressable, { style: styles.card, onPress: () => openPost(item), children: [_jsx(Text, { style: [styles.body, { fontWeight: '700' }], children: item.title ?? strings.defaultPostTitle }), item.excerpt ? (_jsx(Text, { style: [styles.caption, { marginTop: theme.spacing.xs }], children: item.excerpt })) : null] })), ListEmptyComponent: _jsx(Text, { style: styles.empty, children: strings.empty }) }) }));
37
+ }
38
+ export { BlogsScreen as SmartLinksBlogsScreen };
39
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,34 @@
1
+ {
2
+ "name": "@smart_links/blogs",
3
+ "version": "2.0.0",
4
+ "main": "dist/index.js",
5
+ "types": "dist/index.d.ts",
6
+ "files": [
7
+ "dist"
8
+ ],
9
+ "publishConfig": {
10
+ "access": "public"
11
+ },
12
+ "repository": {
13
+ "type": "git",
14
+ "url": "https://gitlab.com/elmansoryanas/smartlinks-react-native.git",
15
+ "directory": "packages/blogs"
16
+ },
17
+ "scripts": {
18
+ "build": "tsc -p tsconfig.json",
19
+ "typecheck": "tsc -p tsconfig.json --noEmit",
20
+ "prepublishOnly": "npm run build"
21
+ },
22
+ "dependencies": {
23
+ "@smart_links/core": "2.0.0"
24
+ },
25
+ "peerDependencies": {
26
+ "react": "*",
27
+ "react-native": "*"
28
+ },
29
+ "devDependencies": {
30
+ "@types/react": "^18.3.18",
31
+ "typescript": "^5.7.3"
32
+ },
33
+ "license": "Apache-2.0"
34
+ }