Skip to main content

shopify_client/admin/theme/
remote.rs

1use 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}