Skip to content

Commit 5df3b84

Browse files
authored
Merge pull request #99 from bendera/feat/sync-recents
Feat/sync recents
2 parents af21a1b + adb878e commit 5df3b84

File tree

9 files changed

+60
-17
lines changed

9 files changed

+60
-17
lines changed

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,12 @@
22

33
All notable changes to the "commit-message-editor" extension will be documented in this file.
44

5+
## [Unreleased]
6+
7+
### Fixed
8+
9+
- Snycronize repository selector instances.
10+
511
## [0.24.2] - 2023-05-08
612

713
### Fixed

frontend/src/components/cme-form-view/cme-form-view.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,14 @@ import {
1111
closeTab,
1212
copyToSCMInputBox,
1313
updateTokenValues,
14+
recentCommitsRequest,
1415
} from '../../store/actions';
1516
import {triggerInputboxRerender} from '../helpers';
1617
import '../cme-repo-selector';
1718
import FormBuilder from './FormBuilder';
1819
import TemplateCompiler from './TemplateCompiler';
1920
import {CodeEditor} from '../cme-code-editor/cme-code-editor';
20-
import { RepoSelector } from '../cme-repo-selector';
21+
import {RepoSelector} from '../cme-repo-selector';
2122

2223
@customElement('cme-form-view')
2324
export class FormView extends connect(store)(LitElement) {
@@ -127,6 +128,10 @@ export class FormView extends connect(store)(LitElement) {
127128
this._updateTokenValues();
128129
}
129130

131+
private _handleRepositoryChange(ev: CustomEvent<string>) {
132+
store.dispatch(recentCommitsRequest(ev.detail));
133+
}
134+
130135
private _handleSuccessButtonClick() {
131136
const compiler = new TemplateCompiler(
132137
this._dynamicTemplate,
@@ -223,7 +228,10 @@ export class FormView extends connect(store)(LitElement) {
223228
${formElements}
224229
</vscode-form-container>
225230
</div>
226-
<cme-repo-selector id="form-view-repo-selector"></cme-repo-selector>
231+
<cme-repo-selector
232+
id="form-view-repo-selector"
233+
@cme-change=${this._handleRepositoryChange}
234+
></cme-repo-selector>
227235
<div class="buttons">
228236
<vscode-button
229237
id="success-button-form"

frontend/src/components/cme-repo-selector.ts

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import '@bendera/vscode-webview-elements/dist/vscode-icon';
66
import '@bendera/vscode-webview-elements/dist/vscode-single-select';
77
import '@bendera/vscode-webview-elements/dist/vscode-option';
88
import store, {RootState} from '../store/store';
9+
import {changeSelectedRepository} from '../store/actions';
910

1011
@customElement('cme-repo-selector')
1112
export class RepoSelector extends connect(store)(LitElement) {
@@ -43,13 +44,14 @@ export class RepoSelector extends connect(store)(LitElement) {
4344
private _handleChange(
4445
ev: CustomEvent<{selectedIndex: number; value: string}>
4546
) {
46-
this._selectedRepositoryPath = ev.detail.value;
47-
47+
const path = ev.detail.value;
4848
const changeEvent = new CustomEvent('cme-change', {
49-
detail: ev.detail.value,
49+
detail: path,
5050
});
5151

52+
this._selectedRepositoryPath = path;
5253
this.dispatchEvent(changeEvent);
54+
store.dispatch(changeSelectedRepository(path));
5355
}
5456

5557
static get styles(): CSSResult {
@@ -72,13 +74,13 @@ export class RepoSelector extends connect(store)(LitElement) {
7274
return html`<div class="repo-info">
7375
<vscode-icon name="repo"></vscode-icon>&nbsp;
7476
<b>Selected repository:</b>&nbsp;
75-
<vscode-single-select @vsc-change=${this._handleChange}>
77+
<vscode-single-select
78+
@vsc-change=${this._handleChange}
79+
.value=${this._selectedRepositoryPath}
80+
>
7681
${this._availableRepositories.map(
7782
(r) =>
78-
html`<vscode-option
79-
description=${r}
80-
value=${r}
81-
?selected=${this._selectedRepositoryPath === r}
83+
html`<vscode-option description=${r} value=${r}
8284
>${this._getNameFromPath(r)}</vscode-option
8385
>`
8486
)}

frontend/src/components/cme-text-view.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,10 @@ export class TextView extends connect(store)(LitElement) {
118118
store.dispatch(textareaValueChanged(ev.detail));
119119
}
120120

121+
private _handleRepositoryChange(ev: CustomEvent<string>) {
122+
store.dispatch(recentCommitsRequest(ev.detail));
123+
}
124+
121125
stateChanged(state: RootState): void {
122126
const {config} = state;
123127
const {
@@ -267,7 +271,10 @@ export class TextView extends connect(store)(LitElement) {
267271
</p>
268272
</div>
269273
${this._useMonospaceEditor ? monospaceEditor : inputbox}
270-
<cme-repo-selector id="text-view-repo-selector"></cme-repo-selector>
274+
<cme-repo-selector
275+
id="text-view-repo-selector"
276+
@cme-change=${this._handleRepositoryChange}
277+
></cme-repo-selector>
271278
<div class="buttons">
272279
<vscode-button @click="${this._handleSuccessButtonClick}"
273280
>${this._saveAndClose ? 'Save and close' : 'Save'}</vscode-button

frontend/src/store/actions.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ export const CONFIRM_AMEND = 'CONFIRM_AMEND';
1010
export const COPY_TO_SCM_INPUT_BOX = 'COPY_TO_SCM_INPUT_BOX';
1111
export const REPOSITORY_INFO_RECEIVED = 'REPOSITORY_INFO_RECEIVED';
1212
export const UPDATE_TOKEN_VALUES = 'UPDATE_TOKEN_VALUES';
13+
export const CHANGE_SELECTED_REPOSITORY = 'CHANGE_SELECTED_REPOSITORY';
1314

1415
export const IMPORT_CONFIG = 'IMPORT_CONFIG';
1516
export const SHAREABLE_CONFIG_CHANGED = 'SHAREABLE_CONFIG_CHANGED';
@@ -24,7 +25,9 @@ export const SHAREABLE_CONFIG_DYNAMIC_TEMPLATE_CHANGE =
2425
export const CHANGE_STATUS_MESSAGE = 'CHANGE_STATUS_MESSAGE';
2526

2627
export const receiveConfig = createAction<ExtensionConfig>(RECEIVE_CONFIG);
27-
export const recentCommitsRequest = createAction(RECENT_COMMITS_REQUEST);
28+
export const recentCommitsRequest = createAction<string | undefined>(
29+
RECENT_COMMITS_REQUEST
30+
);
2831
export const recentCommitsReceived = createAction<Commit[]>(
2932
RECENT_COMMITS_RECEIVED
3033
);
@@ -44,6 +47,9 @@ export const receiveRepositoryInfo = createAction<RepositoryInfo>(
4447
export const updateTokenValues = createAction<{[key: string]: string}>(
4548
UPDATE_TOKEN_VALUES
4649
);
50+
export const changeSelectedRepository = createAction<string>(
51+
CHANGE_SELECTED_REPOSITORY
52+
);
4753

4854
export const importConfig = createAction(IMPORT_CONFIG);
4955
export const shareableConfigChange = createAction<ShareableConfig>(

frontend/src/store/middlewares/postMessageDispatcher.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ export const postMessageDispatcher: Middleware = (_) => (next) => (action) => {
1818
case RECENT_COMMITS_REQUEST:
1919
vscode.postMessage({
2020
command: 'requestRecentCommits',
21+
payload: payload ? payload : '',
2122
});
2223
break;
2324
case CLOSE_TAB:

frontend/src/store/reducers.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import {
1515
TEXTAREA_VALUE_CHANGED,
1616
UPDATE_TOKEN_VALUES,
1717
CHANGE_STATUS_MESSAGE,
18+
CHANGE_SELECTED_REPOSITORY,
1819
} from './actions';
1920

2021
export const createInitialState = (): RootState => ({
@@ -94,6 +95,9 @@ export const rootReducer = createReducer(initialState, {
9495
const {payload} = action;
9596
state.tokenValues = payload;
9697
},
98+
[CHANGE_SELECTED_REPOSITORY]: (state: RootState, action) => {
99+
state.selectedRepositoryPath = action.payload as string;
100+
},
97101
[SHAREABLE_CONFIG_CHANGED]: (state: RootState, action) => {
98102
const {payload} = action;
99103
const {staticTemplate = '', dynamicTemplate = '', tokens = []} = payload;

src/commands/EditorController.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ export default class EditorController {
131131
this._ui?.sendConfig(cfg);
132132
break;
133133
case 'requestRecentCommits':
134-
this._populateCommitList();
134+
this._populateCommitList(payload as string);
135135
break;
136136
case 'confirmAmend':
137137
this._confirmAmend(payload);
@@ -144,9 +144,9 @@ export default class EditorController {
144144
}
145145
}
146146

147-
private _populateCommitList() {
147+
private _populateCommitList(path = '') {
148148
this._git
149-
.getRecentCommitMessages(10)
149+
.getRecentCommitMessages(10, path)
150150
.then((commits) => {
151151
this._ui?.sendRecentCommits(commits);
152152
})

src/utils/GitService.ts

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -138,8 +138,17 @@ class GitService {
138138
return log;
139139
}
140140

141-
public async getRecentCommitMessages(limit: number = 32) {
142-
const repo = this.getSelectedRepository();
141+
public async getRecentCommitMessages(
142+
limit: number = 32,
143+
repositoryPath: string
144+
) {
145+
let repo: Repository | undefined;
146+
147+
if (repositoryPath === '') {
148+
repo = this.getSelectedRepository();
149+
} else {
150+
repo = this.getRepositoryByPath(repositoryPath);
151+
}
143152

144153
if (!repo) {
145154
return [];

0 commit comments

Comments
 (0)