From 05eecb42b3c859b5f70c628c41efac5973088071 Mon Sep 17 00:00:00 2001 From: Jon Staab Date: Wed, 1 May 2024 16:15:00 -0700 Subject: [PATCH] Re-work feeds based on new spec --- .gitattributes | 2 + src/app/shared/DVMField.svelte | 25 +- src/app/shared/Feed.svelte | 3 +- src/app/shared/FeedControls.svelte | 265 +++++++++--------- src/app/shared/FeedForm.svelte | 263 ++++++----------- src/app/shared/FeedFormAdvanced.svelte | 49 ++++ src/app/shared/FeedFormDVMs.svelte | 16 ++ src/app/shared/FeedFormFilters.svelte | 135 +++++++++ src/app/shared/FeedFormPeople.svelte | 18 ++ src/app/shared/FeedFormRelay.svelte | 20 -- src/app/shared/FeedFormRelays.svelte | 17 ++ .../shared/FeedFormSectionCreatedAt.svelte | 39 +++ src/app/shared/FeedFormSectionDVM.svelte | 14 + ...eld.svelte => FeedFormSectionKinds.svelte} | 17 +- src/app/shared/FeedFormSectionMentions.svelte | 30 ++ src/app/shared/FeedFormSectionPeople.svelte | 53 ++++ src/app/shared/FeedFormSectionRelays.svelte | 19 ++ src/app/shared/FeedFormSectionTopics.svelte | 19 ++ src/app/shared/FeedFormTopics.svelte | 18 ++ src/app/shared/FilterAuthorsField.svelte | 43 --- src/app/shared/FilterField.svelte | 132 --------- src/app/shared/FilterMentionsField.svelte | 27 -- src/app/shared/FilterSearchField.svelte | 19 -- src/app/shared/FilterTimeframeField.svelte | 31 -- src/app/shared/FilterTopicsField.svelte | 18 -- src/app/util/feeds.ts | 12 - src/app/views/Calendar.svelte | 10 +- src/app/views/Feeds.svelte | 21 +- src/app/views/Market.svelte | 10 +- src/app/views/Publishes.svelte | 1 - src/app/views/RelayDetail.svelte | 6 +- src/app/views/TopicFeed.svelte | 4 +- src/engine/channels/requests.ts | 8 +- src/engine/events/requests.ts | 15 +- src/engine/relays/utils.ts | 6 +- src/partials/DateInput.svelte | 32 ++- src/partials/MenuItem.svelte | 6 +- src/partials/Popover2.svelte | 23 +- src/partials/SelectList.svelte | 1 - src/partials/Textarea.svelte | 12 +- 40 files changed, 775 insertions(+), 684 deletions(-) create mode 100644 .gitattributes create mode 100644 src/app/shared/FeedFormAdvanced.svelte create mode 100644 src/app/shared/FeedFormDVMs.svelte create mode 100644 src/app/shared/FeedFormFilters.svelte create mode 100644 src/app/shared/FeedFormPeople.svelte delete mode 100644 src/app/shared/FeedFormRelay.svelte create mode 100644 src/app/shared/FeedFormRelays.svelte create mode 100644 src/app/shared/FeedFormSectionCreatedAt.svelte create mode 100644 src/app/shared/FeedFormSectionDVM.svelte rename src/app/shared/{FilterKindsField.svelte => FeedFormSectionKinds.svelte} (79%) create mode 100644 src/app/shared/FeedFormSectionMentions.svelte create mode 100644 src/app/shared/FeedFormSectionPeople.svelte create mode 100644 src/app/shared/FeedFormSectionRelays.svelte create mode 100644 src/app/shared/FeedFormSectionTopics.svelte create mode 100644 src/app/shared/FeedFormTopics.svelte delete mode 100644 src/app/shared/FilterAuthorsField.svelte delete mode 100644 src/app/shared/FilterField.svelte delete mode 100644 src/app/shared/FilterMentionsField.svelte delete mode 100644 src/app/shared/FilterSearchField.svelte delete mode 100644 src/app/shared/FilterTimeframeField.svelte delete mode 100644 src/app/shared/FilterTopicsField.svelte diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 00000000..fd177f33 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +package-lock.json -diff +yarn.lock -diff diff --git a/src/app/shared/DVMField.svelte b/src/app/shared/DVMField.svelte index 0a66918f..b5e634d8 100644 --- a/src/app/shared/DVMField.svelte +++ b/src/app/shared/DVMField.svelte @@ -11,7 +11,6 @@ export let dvmItem export let onChange - export let onRemove const removeTag = i => { onChange({...dvmItem, tags: dvmItem.tags.toSpliced(i, 1)}) @@ -29,6 +28,7 @@ {label: "Content discovery", kind: 5300}, {label: "Person discovery", kind: 5301}, {label: "Content search", kind: 5302}, + {label: "Person Search", kind: 5303}, ] const searchKindItems = fuzzy(kinds, {keys: ["kind", "label"]}) @@ -46,14 +46,18 @@ - +
{displayKind(item)}
onChange({...dvmItem, relays})}> @@ -61,17 +65,17 @@

Select which relays requests to this DVM should be sent to.

- {#each dvmItem.tags as [type, value], i (i + key)} -
+ {#each dvmItem.tags || [] as [type, value], i (i + key)} +
removeTag(i)} /> -
-
+
+
onChange(dvmItem)} />
-
+
- onChange(dvmItem)} /> + onChange(dvmItem)} />
@@ -79,7 +83,4 @@ Add tag -
- -
diff --git a/src/app/shared/Feed.svelte b/src/app/shared/Feed.svelte index c9c3b7f7..400323d1 100644 --- a/src/app/shared/Feed.svelte +++ b/src/app/shared/Feed.svelte @@ -1,7 +1,6 @@
@@ -99,103 +115,105 @@ Show replies
- - +
+ + {#if listMenuIsOpen} + + + + Your Lists & Feeds + + + + +
+ {#each $userLists as list} + loadList(list)}>{displayList2(list)} + {/each} +
+
+
+ {/if} +
Showing notes:
- {#if subFeeds.length > 0} + {#if feed[0] !== FeedType.Intersection} Custom feed ({quantify(subFeeds.length, "selection")}) - {/if} - {#if feedType === FeedType.Relay} - - On {feed[1].length === 1 ? displayRelayUrl(feed[1][0]) : `${feed[1].length} relays`} - - {:else if feedType === FeedType.List} - - From {quantify(feed.slice(1).length, "list")} - - {:else if feedType === FeedType.DVM} - - From {quantify(feed.slice(1).length, "DVM")} - - {:else if feedType === FeedType.Filter} - {#if feed.length > 2} - - From {quantify(feed.slice(1).length, "filter")} - - {:else} - {#await feedLoader.compiler.compile(feed)} - - {:then [{ filters: [filter] }]} - -
- - {#if feed[1].scopes} - From {displayList(feed[1].scopes)} - {:else if filter.authors} - From {quantify(filter.authors.length, "author")} - {:else} - From global + {:else} + +
+ + {#if currentScopeFeed && isScopeFeed(currentScopeFeed)} + From {displayList(getFeedArgs(currentScopeFeed))} + {:else if currentScopeFeed && isAuthorFeed(currentScopeFeed)} + From {quantify(getFeedArgs(currentScopeFeed).length, "author")} + {:else} + From global + {/if} + + +
+
+ + setFeed(makeScopeFeed(Scope.Follows))}> + Follows + + setFeed(makeScopeFeed(Scope.Network))}> + Network + + removeFeed(currentScopeFeed)}> + Global + + +
+
+ {#each subFeeds as subFeed} + {@const feedType = subFeed[0]} + {#if ![FeedType.Search, FeedType.Scope, FeedType.Author].includes(feedType)} + removeFeed(subFeed)}> + {#if feedType === FeedType.Relay} + On {subFeed.length === 2 ? displayRelayUrl(subFeed[1]) : `${subFeed.length - 1} relays`} + {:else if feedType === FeedType.List} + From {quantify(getFeedArgs(subFeed).length, "list")} + {:else if feedType === FeedType.Address || feedType === FeedType.ID} + {quantify(getFeedArgs(subFeed).length, "event")} + {:else if feedType === FeedType.DVM} + From {quantify(getFeedArgs(subFeed).length, "DVM")} + {:else if feedType === FeedType.Kind} + {@const kinds = getFeedArgs(subFeed)} + {pluralize(kinds.length, "Kind")} + {displayList(kinds)} + {:else if feedType === FeedType.Tag} + {@const [key, values] = getFeedArgs(subFeed)} + {#if key === "#p"} + Mentioning {displayPeople(values)} + {:else if key === "#t"} + Related to {displayTopics(values)} + {:else if key === "#e" || key === "#a"} + Tagging {pluralize(values.length, "event")} + {:else} + {pluralize(values.length, "other tag")} + {/if} + {:else if isCreatedAtFeed(subFeed)} + {#each getFeedArgs(subFeed) as { since, until, relative }} + {#if since && until} + Between {formatTimestampAsDate(since)} and {formatTimestampAsDate(until)} + {:else if since} + From {formatTimestampAsDate(since)} + {:else if until} + Through {formatTimestampAsDate(until)} {/if} - - -
-
- - setPart({scopes: [Scope.Follows]})}> - Follows - - setPart({scopes: [Scope.Network]})}> - Network - - removeParts(["scopes"])}> - Global - - - Custom - - -
-
- {#if filter.kinds?.length > 0} - removeParts(["kinds"])}> - {pluralize(filter.kinds.length, "Kind")} - {displayList(filter.kinds)} - - {/if} - {#if filter["#p"]?.length > 0} - removeParts(["#p"])}> - Mentioning {displayPeople(filter["#p"])} - - {/if} - {#if filter["#t"]?.length > 0} - removeParts(["#t"])}> - Related to {displayTopics(filter["#t"])} - - {/if} - {#if filter.since && filter.until} - {@const since = formatTimestampAsDate(filter.since)} - {@const until = formatTimestampAsDate(filter.until)} - removeParts(["since", "until"])}> - Between {since} and {until} - - {:else if filter.since} - removeParts(["since"])}> - From {formatTimestampAsDate(filter.since)} - - {:else if filter.until} - removeParts(["until"])}> - Through {formatTimestampAsDate(filter.until)} - - {/if} - {/await} - {/if} + {/each} + {/if} + + {/if} + {/each}
@@ -216,10 +234,3 @@ {/if}
- -{#if true || isOpen} - - Create a custom Feed - - -{/if} diff --git a/src/app/shared/FeedForm.svelte b/src/app/shared/FeedForm.svelte index c92c1434..99521b5a 100644 --- a/src/app/shared/FeedForm.svelte +++ b/src/app/shared/FeedForm.svelte @@ -1,222 +1,121 @@ + options={[FormType.People, FormType.Topics, FormType.Relays, FormType.DVMs]} + onChange={onFormTypeChange} + value={formType}>
- {#if option === FeedType.Filter} + {#if option === FormType.People} - Standard - {:else if option === FeedType.Relay} + People + {:else if option === FormType.Topics} + + + + Topics + {:else if option === FormType.Relays} Relays - {:else if option === FeedType.DVM} + {:else if option === FormType.DVMs} DVMs - {:else} - - - - Advanced {/if}
+
+ onFormTypeChange(FormType.Advanced)}>Advanced mode +
- {#if feedType === FeedType.Relay} - - - controller.setAtCursor(urls, [1])}> - {displayRelayUrl(item)} - -

Select which relays you'd like to limit loading feeds from.

-
- {:else if feedType === FeedType.Filter} - - {#each current.slice(1) as filter, filterIdx ([current.length, filterIdx].join(":"))} - {@const feedIdx = inc(filterIdx)} - - controller.setAtCursor(filter, [feedIdx])} - onRemove={() => controller.updateAtCursor(feed => feed.toSpliced(feedIdx, 1))} /> - - {#if feedIdx < current.length - 1} -

— OR —

- {/if} - {/each} -
- controller.setAtCursor([...current, {}])}> - Add filter - -
- {:else if feedType === FeedType.List} - - controller.setAtCursor([FeedType.List, ...addrs])}> - {displayListByAddress(item)} - -

Select which lists you'd like to view.

-
- {:else if feedType === FeedType.DVM} - {#each current.slice(1) as item, itemIdx ([current.length, itemIdx].join(":"))} - {@const feedIdx = inc(itemIdx)} - - controller.setAtCursor(item, [feedIdx])} - onRemove={() => controller.updateAtCursor(feed => feed.toSpliced(feedIdx, 1))} /> - - {#if feedIdx < current.length - 1} -

— OR —

- {/if} - {/each} -
- controller.setAtCursor([...current, {kind: 5300, tags: [], relays: []}])}> - Add DVM - -
+ {#if formType === FormType.People} + + {:else if formType === FormType.Topics} + + {:else if formType === FormType.Relays} + + {:else if formType === FormType.DVMs} + + {:else if formType === FormType.Advanced} + {/if} - {#each subFeeds as subFeed, i (displayFeed(subFeed) + i)} - -
- controller.removeFeed(current.indexOf(subFeed))}> - - - {displayFeed(subFeed)} -
- controller.pushCursor(current.indexOf(subFeed))}> - Edit - -
- {#if i < subFeeds.length - 1} -

- {#if feedType === FeedType.Union} - — OR — - {:else if feedType === FeedType.Intersection} - — AND — - {:else if feedType === FeedType.Difference} - — WITHOUT — - {:else if feedType === FeedType.SymmetricDifference} - — XOR — - {/if} -

- {/if} - {/each} - {#if hasSubFeeds(current)} -
- -
- Add Feed -
-
- - controller.addFeed(FeedType.Filter)}>Standard Feed - controller.addFeed(FeedType.List)}>List Feed - controller.addFeed(FeedType.DVM)}>DVM Feed - -
-
-
- {/if} -
- {#if current === feed} - Cancel - onChange(feed)}>Save - {:else} - Done - {/if} +
+ Discard + onChange(feed)}>Save feed
diff --git a/src/app/shared/FeedFormAdvanced.svelte b/src/app/shared/FeedFormAdvanced.svelte new file mode 100644 index 00000000..47a6c65f --- /dev/null +++ b/src/app/shared/FeedFormAdvanced.svelte @@ -0,0 +1,49 @@ + + + +