···656 (res, memo)
657}
6580000000000000000000000000000000000000000000000000000000000000000000000000000659/// Fetches notebooks from UFOS with SSR support in fullstack mode
660#[cfg(feature = "fullstack-server")]
661pub fn use_notebooks_from_ufos() -> (
···656 (res, memo)
657}
658659+/// Fetches all entries for a specific DID with SSR support
660+#[cfg(feature = "fullstack-server")]
661+pub fn use_entries_for_did(
662+ ident: ReadSignal<AtIdentifier<'static>>,
663+) -> (
664+ Result<Resource<Option<Vec<(serde_json::Value, serde_json::Value)>>>, RenderError>,
665+ Memo<Option<Vec<(EntryView<'static>, Entry<'static>)>>>,
666+) {
667+ let fetcher = use_context::<crate::fetch::Fetcher>();
668+ let res = use_server_future(use_reactive!(|ident| {
669+ let fetcher = fetcher.clone();
670+ async move {
671+ fetcher
672+ .fetch_entries_for_did(&ident())
673+ .await
674+ .ok()
675+ .map(|entries| {
676+ entries
677+ .iter()
678+ .filter_map(|arc| {
679+ let (view, entry) = arc.as_ref();
680+ let view_json = serde_json::to_value(view).ok()?;
681+ let entry_json = serde_json::to_value(entry).ok()?;
682+ Some((view_json, entry_json))
683+ })
684+ .collect::<Vec<_>>()
685+ })
686+ }
687+ }));
688+ let memo = use_memo(use_reactive!(|res| {
689+ let res = res.as_ref().ok()?;
690+ if let Some(Some(values)) = &*res.read() {
691+ let result: Vec<_> = values
692+ .iter()
693+ .filter_map(|(view_json, entry_json)| {
694+ let view = jacquard::from_json_value::<EntryView>(view_json.clone()).ok()?;
695+ let entry = jacquard::from_json_value::<Entry>(entry_json.clone()).ok()?;
696+ Some((view, entry))
697+ })
698+ .collect();
699+ Some(result)
700+ } else {
701+ None
702+ }
703+ }));
704+ (res, memo)
705+}
706+707+/// Fetches all entries for a specific DID client-side only (no SSR)
708+#[cfg(not(feature = "fullstack-server"))]
709+pub fn use_entries_for_did(
710+ ident: ReadSignal<AtIdentifier<'static>>,
711+) -> (
712+ Resource<Option<Vec<(EntryView<'static>, Entry<'static>)>>>,
713+ Memo<Option<Vec<(EntryView<'static>, Entry<'static>)>>>,
714+) {
715+ let fetcher = use_context::<crate::fetch::Fetcher>();
716+ let res = use_resource(move || {
717+ let fetcher = fetcher.clone();
718+ async move {
719+ fetcher
720+ .fetch_entries_for_did(&ident())
721+ .await
722+ .ok()
723+ .map(|entries| {
724+ entries
725+ .iter()
726+ .map(|arc| arc.as_ref().clone())
727+ .collect::<Vec<_>>()
728+ })
729+ }
730+ });
731+ let memo = use_memo(move || res.read().clone().flatten());
732+ (res, memo)
733+}
734+735/// Fetches notebooks from UFOS with SSR support in fullstack mode
736#[cfg(feature = "fullstack-server")]
737pub fn use_notebooks_from_ufos() -> (