shopify_client/admin/theme/
remote.rs1use crate::common::ServiceContext;
2use crate::{
3 admin::generated::types::theme::{ListThemesResp, ThemeDuplicateResp},
4 common::{http::execute_graphql, types::APIError},
5};
6
7use serde_json::json;
8
9const THEME_FIELDS: &str = r#"
10 id
11 name
12 role
13 processing
14 createdAt
15 updatedAt
16"#;
17
18pub async fn list_themes(
19 ctx: &ServiceContext,
20 first: i64,
21 roles: Option<&[&str]>,
22) -> Result<ListThemesResp, APIError> {
23 let query = format!(
24 r#"
25 query ListThemes($first: Int!, $roles: [ThemeRole!]) {{
26 themes(first: $first, roles: $roles) {{
27 edges {{
28 node {{{fields}}}
29 }}
30 pageInfo {{
31 hasNextPage
32 endCursor
33 }}
34 }}
35 }}
36 "#,
37 fields = THEME_FIELDS
38 );
39
40 let variables = json!({
41 "first": first,
42 "roles": roles,
43 });
44
45 execute_graphql(ctx, &query, variables).await
46}
47
48pub async fn duplicate_theme(
49 ctx: &ServiceContext,
50 id: &str,
51 name: Option<&str>,
52) -> Result<ThemeDuplicateResp, APIError> {
53 let query = format!(
54 r#"
55 mutation ThemeDuplicate($id: ID!, $name: String) {{
56 themeDuplicate(id: $id, name: $name) {{
57 newTheme {{{fields}}}
58 userErrors {{
59 field
60 message
61 }}
62 }}
63 }}
64 "#,
65 fields = THEME_FIELDS
66 );
67
68 let variables = json!({
69 "id": id,
70 "name": name,
71 });
72
73 execute_graphql(ctx, &query, variables).await
74}