@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.
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +39 -0
- package/dist/index.js.map +1 -0
- package/package.json +34 -0
package/dist/index.d.ts
ADDED
|
@@ -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
|
+
}
|