Skip to content

Commit

Permalink
Merge branch 'dev'
Browse files Browse the repository at this point in the history
  • Loading branch information
Zitrone44 committed Mar 5, 2025
2 parents c7ae153 + 915d880 commit 993ef61
Show file tree
Hide file tree
Showing 6 changed files with 74 additions and 17 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ export interface QueryTab {
selectedCourseName: string;
selectedTaskName: string;
active: BackendUser[];
createdAt: number;
}

export function queryTabEquals(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,11 @@ import {
selectTabs as selectInputTabs,
} from "../sql-input-tabs/state/sql-input-tabs.selectors";
import { AuthService } from "../../../service/auth.service";
import { setDatabaseInformation } from "../state/sql-playground.actions";
import {
setDatabaseInformation,
updateScheme,
} from "../state/sql-playground.actions";
import { selectResultset } from "../dynamic-result-table/state/dynamic-result-table.selectors";

export interface Identity<I> {
id: I;
Expand Down Expand Up @@ -49,6 +53,8 @@ export interface Backend {
emitResultChange(event: ChangeEvent<ResultTab>): Observable<void>;
announceSelectedInput(id: string): Observable<void>;
streamSelectedInputs(): Observable<AwarenessState[]>;
announceSchemaChange(): Observable<void>;
streamSchemaChange(): Observable<void>;
}

@Injectable({ providedIn: "root" })
Expand Down Expand Up @@ -240,6 +246,14 @@ export class BackendService {
);
});

this.store.select(selectResultset).subscribe(() => {
this.currentBackend.announceSchemaChange().subscribe(() => {});
});

this.currentBackend.streamSchemaChange().subscribe(() => {
this.store.dispatch(updateScheme());
});

setTimeout(() => {
this.store
.select(selectInputTabs)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -198,4 +198,32 @@ export class CollaborativeBackend implements Backend {
};
});
}

announceSchemaChange(): Observable<void> {
return new Observable<void>((observer) => {
const newValue =
(this.provider.awareness.getLocalState()["schemaCounter"] ?? 0) + 1;
this.provider.awareness.setLocalStateField("schemaCounter", newValue);

observer.next();
observer.complete();
});
}

private schamaMap: Map<number, number> = new Map();

streamSchemaChange(): Observable<void> {
return new Observable<void>((observer) => {
this.provider.awareness.on("change", () => {
for (const [key, value] of this.provider.awareness
.getStates()
.entries()) {
if (this.schamaMap.get(key) !== value.schemaCounter) {
observer.next();
this.schamaMap.set(key, value.schemaCounter);
}
}
});
});
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -64,4 +64,12 @@ export class LocalBackend implements Backend {
streamMetaChanges(): Observable<{ key: string; value: any }> {
return of();
}

announceSchemaChange(): Observable<void> {
return of();
}

streamSchemaChange(): Observable<void> {
return of();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import { Group } from "../../../../model/Group";
import { SqlPlaygroundService } from "../../../../service/sql-playground.service";
import { selectBackend } from "../../state/sql-playground.selectors";
import { BackendDefintion } from "../../collab/backend.service";
import { closeAllTabs } from "../../sql-input-tabs/state/sql-input-tabs.actions";

@Component({
selector: "app-db-control-co-working",
Expand Down Expand Up @@ -84,6 +85,7 @@ export class DbControlCoWorkingComponent implements OnInit {
},
})
);
this.store.dispatch(closeAllTabs());
this.collaborativeMode = true;
});
});
Expand All @@ -95,6 +97,7 @@ export class DbControlCoWorkingComponent implements OnInit {
backend: { type: "collaborative", id: this.selectedGroup.toString() },
})
);
this.store.dispatch(closeAllTabs());
}

activateGroup(groupId: number) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,22 +20,25 @@ export const sqlInputTabsReducer = createReducer(
...state,
tabs: [
...state.tabs,
tab ?? {
id: crypto.randomUUID(),
name: "New Query",
content: "",
error: false,
errorMsg: null,
isCorrect: false,
isSubmitted: false,
isSubmitMode: false,
selectedCourse: undefined,
selectedTask: undefined,
selectedCourseName: "Course",
selectedTaskName: "Task",
active: [],
},
],
tab
? { ...tab, createdAt: tab.createdAt ?? Date.now() }
: {
id: crypto.randomUUID(),
name: "New Query",
content: "",
error: false,
errorMsg: null,
isCorrect: false,
isSubmitted: false,
isSubmitMode: false,
selectedCourse: undefined,
selectedTask: undefined,
selectedCourseName: "Course",
selectedTaskName: "Task",
active: [],
createdAt: Date.now(),
},
].sort((a, b) => a.createdAt - b.createdAt),
activeTabIndex: state.tabs.length,
})),
on(SqlInputTabsActions.closeTab, (state, { index }) => {
Expand Down

0 comments on commit 993ef61

Please sign in to comment.