-import { writable } from 'svelte/store';
-
-const internals = {};
-
-internals.forums = [
- {
- id: 'life',
- glyph: '☆',
- label: 'Life'
- },
- {
- id: 'the-world',
- glyph: '◯',
- label: 'The World'
- },
- {
- id: 'online',
- glyph: '⏀',
- label: 'Online'
- },
- {
- id: 'experience',
- glyph: '♢',
- label: 'Experience'
- },
- {
- id: 'belief',
- glyph: '⏃',
- label: 'Belief'
- },
- {
- id: 'movement',
- glyph: '▷',
- label: 'Movement'
- },
- {
- id: 'emotion',
- glyph: '☽',
- label: 'Emotion'
- },
- {
- id: 'interaction',
- glyph: '〒',
- label: 'Interaction'
- },
- {
- id: 'structure',
- glyph: '▢',
- label: 'Structure'
- },
- {
- id: 'sound',
- glyph: '〰',
- label: 'Sound'
- },
- {
- id: 'words',
- glyph: '╳',
- label: 'Words'
- },
- {
- id: 'us',
- glyph: '╱',
- label: 'Us'
- },
- {
- id: 'everything',
- glyph: '♡',
- label: 'Everything'
- }
-];
+import { readable } from 'svelte/store';
+import { onMessage } from '../socket_coordinator';
+
+const internals = {
+
+ // Constants
+
+ kChangeFeedEventName: 'changefeed:forums',
+
+ // The exported data structure
-export const forums = writable(internals.forums);
+ forums: [],
-export function addForum() {
- const id = Math.random();
+ // Handles messages from the event
- forums.update((forums) => ([...forums,
- {
- id,
- glyph: 'の',
- label: `Woah ${id}`
+ handleChangeFeed(data) {
+
+ console.log(data);
+
+ // No old value == add
+ if (!data.old_val) {
+ console.log('Adding new data');
+ return internals.forums.push(data.new_val);
}
- ]));
+
+ // We have an old value, let's find it.
+ const index = internals.forums.findIndex((element) => element.id === data.old_val.id);
+
+ if (index > -1) {
+ console.log(`Found old data at index ${index}`);
+
+ if (data.new_val) {
+ return internals.forums.splice(index, 1, data.new_val || undefined);
+ }
+
+ return internals.forums.splice(index, 1);
+ }
+ }
};
+
+export const forums = readable(internals.forums, (set) => {
+
+ onMessage((message) => {
+
+ if (message.name === internals.kChangeFeedEventName) {
+ internals.handleChangeFeed(message.data);
+ set(internals.forums);
+ }
+ });
+});