Skip to content

Commit 137d8f1

Browse files
committed
feat: added SetTitleFetchState msg for WorkComponent
1 parent b609011 commit 137d8f1

3 files changed

Lines changed: 93 additions & 8 deletions

File tree

thoth-app/src/component/work.rs

Lines changed: 52 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,11 @@ use crate::models::title::delete_title_mutation::DeleteTitleRequestBody;
5959
use crate::models::title::delete_title_mutation::PushActionDeleteTitle;
6060
use crate::models::title::delete_title_mutation::PushDeleteTitle;
6161
use crate::models::title::delete_title_mutation::Variables as DeleteTitlekVariables;
62+
use crate::models::title::title_query::FetchActionTitle;
63+
use crate::models::title::title_query::FetchTitle;
64+
use crate::models::title::title_query::TitleRequest;
65+
use crate::models::title::title_query::TitleRequestBody;
66+
use crate::models::title::title_query::Variables as TitleQueryVariables;
6267
use crate::models::title::update_title_mutation::PushActionUpdateTitle;
6368
use crate::models::title::update_title_mutation::PushUpdateTitle;
6469
use crate::models::title::update_title_mutation::UpdateTitleRequest;
@@ -76,7 +81,7 @@ use crate::models::work::update_work_mutation::UpdateWorkRequestBody;
7681
use crate::models::work::update_work_mutation::Variables as UpdateWorkVariables;
7782
use crate::models::work::work_query::FetchActionWork;
7883
use crate::models::work::work_query::FetchWork;
79-
use crate::models::work::work_query::Variables;
84+
use crate::models::work::work_query::Variables as WorkQueryVariables;
8085
use crate::models::work::work_query::WorkRequest;
8186
use crate::models::work::work_query::WorkRequestBody;
8287
use crate::models::work::WorkStatusValues;
@@ -103,6 +108,7 @@ pub struct WorkComponent {
103108
is_published_in_db: bool,
104109
data: WorkFormData,
105110
fetch_work: FetchWork,
111+
fetch_title: FetchTitle,
106112
push_work: PushUpdateWork,
107113
push_title: PushUpdateTitle,
108114
delete_work: PushDeleteWork,
@@ -124,6 +130,7 @@ struct WorkFormData {
124130
#[allow(clippy::large_enum_variant)]
125131
pub enum Msg {
126132
SetWorkFetchState(FetchActionWork),
133+
SetTitleFetchState(FetchActionTitle),
127134
GetWork,
128135
SetTitlePushState(PushActionUpdateTitle),
129136
SetWorkPushState(PushActionUpdateWork),
@@ -199,6 +206,10 @@ impl Component for WorkComponent {
199206
let data: WorkFormData = Default::default();
200207
let resource_access = ctx.props().current_user.resource_access.clone();
201208
let work_id = ctx.props().work_id;
209+
let title: Title = Default::default();
210+
let push_title = Default::default();
211+
let delete_title = Default::default();
212+
let fetch_title: FetchTitle = Default::default();
202213

203214
ctx.link().send_message(Msg::GetWork);
204215

@@ -218,9 +229,10 @@ impl Component for WorkComponent {
218229
resource_access,
219230
work_id,
220231
publish_confirmation_required: false,
221-
title: Default::default(),
222-
push_title: Default::default(),
223-
delete_title: Default::default(),
232+
title,
233+
push_title,
234+
delete_title,
235+
fetch_title,
224236
}
225237
}
226238

@@ -267,16 +279,48 @@ impl Component for WorkComponent {
267279
FetchState::Failed(_, _err) => false,
268280
}
269281
}
282+
Msg::SetTitleFetchState(fetch_state) => {
283+
self.fetch_title.apply(fetch_state);
284+
match self.fetch_title.as_ref().state() {
285+
FetchState::NotFetching(_) => false,
286+
FetchState::Fetching(_) => false,
287+
FetchState::Fetched(body) => {
288+
self.title = match &body.data.title {
289+
Some(t) => t.to_owned(),
290+
None => Default::default(),
291+
};
292+
true
293+
}
294+
FetchState::Failed(_, _err) => false,
295+
}
296+
}
270297
Msg::GetWork => {
271-
let body = WorkRequestBody {
272-
variables: Variables {
298+
let title_request_body = TitleRequestBody {
299+
variables: TitleQueryVariables {
300+
title_id: self.title.title_id,
301+
},
302+
..Default::default()
303+
};
304+
let title_request = TitleRequest {
305+
body: title_request_body,
306+
};
307+
self.fetch_title = Fetch::new(title_request);
308+
ctx.link()
309+
.send_future(self.fetch_title.fetch(Msg::SetTitleFetchState));
310+
ctx.link()
311+
.send_message(Msg::SetTitleFetchState(FetchAction::Fetching));
312+
313+
let work_request_body = WorkRequestBody {
314+
variables: WorkQueryVariables {
273315
work_id: Some(ctx.props().work_id),
274316
publishers: ctx.props().current_user.resource_access.restricted_to(),
275317
},
276318
..Default::default()
277319
};
278-
let request = WorkRequest { body };
279-
self.fetch_work = Fetch::new(request);
320+
let work_request = WorkRequest {
321+
body: work_request_body,
322+
};
323+
self.fetch_work = Fetch::new(work_request);
280324

281325
ctx.link()
282326
.send_future(self.fetch_work.fetch(Msg::SetWorkFetchState));

thoth-app/src/models/title/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
pub mod create_title_mutation;
22
pub mod delete_title_mutation;
33
pub mod update_title_mutation;
4+
pub mod title_query;
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
use serde::Deserialize;
2+
use serde::Serialize;
3+
use thoth_api::model::Title;
4+
use uuid::Uuid;
5+
6+
pub const TITLE_QUERY: &str = "
7+
query TitleQuery($titleId: Uuid!) {
8+
title(titleId: $titleId) {
9+
titleId
10+
workId
11+
localeCode
12+
fullTitle
13+
title
14+
subtitle
15+
canonical
16+
}
17+
}
18+
";
19+
20+
graphql_query_builder! {
21+
TitleRequest,
22+
TitleRequestBody,
23+
Variables,
24+
TITLE_QUERY,
25+
TitleResponseBody,
26+
TitleResponseData,
27+
FetchTitle,
28+
FetchActionTitle
29+
}
30+
31+
#[derive(Debug, Clone, Default, Serialize, Deserialize, PartialEq, Eq)]
32+
#[serde(rename_all = "camelCase")]
33+
pub struct Variables {
34+
pub title_id: Uuid,
35+
}
36+
37+
#[derive(Debug, Clone, Default, Serialize, Deserialize, PartialEq)]
38+
pub struct TitleResponseData {
39+
pub title: Option<Title>,
40+
}

0 commit comments

Comments
 (0)