Skip to content

Commit 2679107

Browse files
authored
Merge pull request #71 from ALM-Rangers/bug/settings-fail-to-copy
fix code when copying settings
2 parents 7b1f6a7 + 31d5df9 commit 2679107

File tree

8 files changed

+432
-877
lines changed

8 files changed

+432
-877
lines changed

package-lock.json

Lines changed: 360 additions & 829 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
"scripts": {
77
"clean:vsix": "rimraf *.vsix",
88
"clean": "npm run clean:vsix && rimraf dist",
9-
"dev": "npm run build:dev && webpack-dev-server -d --hot --progress --colors --https --content-base ./dist --port 9090",
9+
"dev": "npm run build:dev && webpack-dev-server --config webpack.dev.config.js --hot --progress --static ./dist",
1010
"lint": "tslint -c tslint.json \"src/*.ts\"",
1111
"compile": "npm run clean:vsix && webpack --env=prod --progress --mode production",
1212
"compile:dev": "npm run clean:vsix && webpack --env=dev --progress",
@@ -18,7 +18,7 @@
1818
"package:test": "npm run compile:test && node ./scripts/packageTest",
1919
"package:release": "npm run clean:vsix && npm run build:release && node ./scripts/packageRelease",
2020
"test": "snyk test && karma start --single-run",
21-
"start:dev": "webpack-dev-server --config webpack.dev.config.js"
21+
"start:dev": "webpack-dev-server --config webpack.dev.config.js --static ./dist"
2222
},
2323
"dependencies": {
2424
"applicationinsights-js": "^1.0.20",
@@ -33,6 +33,7 @@
3333
"@types/jquery": "^3.2.18",
3434
"@types/react": "~16.8.2",
3535
"@types/react-dom": "~16.8.0",
36+
"@webpack-cli/serve": "^1.7.0",
3637
"base64-inline-loader": "^2.0.1",
3738
"copy-webpack-plugin": "^7.0.0",
3839
"css-loader": "^5.2.4",
@@ -47,8 +48,8 @@
4748
"tslint-loader": "^3.5.4",
4849
"typescript": "^3.9.6",
4950
"webpack": "^5.23.0",
50-
"webpack-cli": "^3.3.12",
51-
"webpack-dev-server": "^4.0.0",
51+
"webpack-cli": "^4.10.0",
52+
"webpack-dev-server": "^4.9.0",
5253
"webpack-merge": "^5.8.0"
5354
}
5455
}

src/Components/AdvancedItemMapping.tsx

Lines changed: 41 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,9 @@ import { Tab, TabBar, TabSize } from "azure-devops-ui/Tabs";
1313

1414
import "../Components/AdvancedItemMapping.scss";
1515
import { css } from "azure-devops-ui/Util";
16-
import { List, IListItemDetails } from "azure-devops-ui/List";
17-
import { ArrayItemProvider } from "azure-devops-ui/Utilities/Provider";
16+
import { IListItemDetails } from "azure-devops-ui/List";
17+
18+
import { DropdownSelection } from "azure-devops-ui/Utilities/DropdownSelection";
1819

1920
export interface IAdvancedItemMappingProps {
2021
show: boolean;
@@ -30,6 +31,8 @@ export class AdvancedItemMapping extends React.Component<
3031
{}
3132
> {
3233
private selectedTabId: ObservableValue<string>;
34+
private selectedLevelItem: ObservableValue<string>;
35+
3336
private _itemsCount: number;
3437

3538
constructor(props: IAdvancedItemMappingProps) {
@@ -40,6 +43,7 @@ export class AdvancedItemMapping extends React.Component<
4043
public render() {
4144
let initialSelectedTabId = this.props.selectedLevels[0];
4245
this.selectedTabId = new ObservableValue(initialSelectedTabId);
46+
this.selectedLevelItem = new ObservableValue<string>("");
4347
let mappingItems: IColumnMapping[] = [];
4448
let startIndex = 0;
4549

@@ -106,12 +110,38 @@ export class AdvancedItemMapping extends React.Component<
106110
</div>
107111
);
108112
} else {
109-
content = (
110-
<List
111-
itemProvider={new ArrayItemProvider<IColumnMapping>(multipleMappings)}
112-
renderRow={this._onRenderRow}
113-
/>
114-
);
113+
for (let index = 0; index < multipleMappings.length; index++) {
114+
let item = multipleMappings[index];
115+
116+
let dropdownOptions: any[] = [];
117+
item.potentialMatches.forEach((match) => {
118+
dropdownOptions.push({
119+
id: match.id,
120+
text: match.name,
121+
data: item.targetColumn.id,
122+
});
123+
});
124+
let className = css("listItem");
125+
console.log("itemsCount,", this._itemsCount)
126+
if (index === this._itemsCount - 1) {
127+
className = css("lastItem");
128+
}
129+
content = (
130+
<div className={className}>
131+
<Dropdown
132+
items={dropdownOptions}
133+
ariaLabel={item.targetColumn.name}
134+
onSelect={this._onMappingChanged}
135+
/>
136+
<Observer selectedItem={this.selectedLevelItem}>
137+
{(props: { selectedItem: string }) => {
138+
return <></>;
139+
}}
140+
141+
</Observer>
142+
</div>
143+
);
144+
};
115145
}
116146
return content;
117147
}
@@ -144,7 +174,9 @@ export class AdvancedItemMapping extends React.Component<
144174
);
145175
};
146176

147-
private _onMappingChanged = (item: any) => {
177+
178+
private _onMappingChanged = (e: any, item: any) => {
179+
this.selectedLevelItem.value = item.text || "";
148180
this.props.onMappingChanged(item.id.toString(), item.data.toString());
149181
};
150182
}

src/Components/CopySettingsView.tsx

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ export interface ICopySettingsViewProps {
2020
servicesClient: ServicesClient;
2121
}
2222
interface ICopySettingsViewState {
23-
selectedTeamName: string;
2423
commonBacklogLevels: string[];
2524
selectedBacklogLevels: string[];
2625
canToggleMappings: boolean;
@@ -39,7 +38,6 @@ export class CopySettingsView extends React.Component<
3938
constructor(props: ICopySettingsViewProps) {
4039
super(props);
4140
this.state = {
42-
selectedTeamName: "",
4341
commonBacklogLevels: [],
4442
selectedBacklogLevels: [],
4543
canToggleMappings: false,
@@ -176,15 +174,14 @@ export class CopySettingsView extends React.Component<
176174
this.setState({ allProjectTeams: teams, loadingTeams: false });
177175
};
178176

179-
private _onSelectTeam = (
180-
event: React.SyntheticEvent<HTMLElement>,
181-
item: IListBoxItem<{}>
182-
) => {
177+
private _onSelectTeam = (event: React.SyntheticEvent<HTMLElement>, item: IListBoxItem<{}>) => {
178+
183179
let selectedTeam = item.text;
184180
if (selectedTeam) {
185181
this.setState({ backlogsLoading: true });
182+
186183
this.props.servicesClient
187-
.loadSelectedTeam(this.state.selectedTeamName)
184+
.loadSelectedTeam(selectedTeam)
188185
.then(() => {
189186
let defaultBoardLevel = [];
190187
defaultBoardLevel.push(this.props.servicesClient.currentBacklogLevel);
@@ -271,6 +268,7 @@ export class CopySettingsView extends React.Component<
271268
}
272269
this.setState({ selectedBacklogLevels: currentLevels });
273270
}
271+
this.props.setCopySettingsLevels(currentLevels);
274272
let canToggleMappings = this._canEnableAdvancedMapping();
275273
this.setState({ canToggleMappings: canToggleMappings });
276274
}

src/Components/PanelContent.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ export class PanelContent extends React.Component<
6161
);
6262
}
6363

64-
public _setCopySettingsLevels(levels: string[]) {
64+
public _setCopySettingsLevels = (levels: string[]) => {
6565
this.setState({ selectedBacklogLevels: levels });
6666
}
6767

src/Shared/ServiceClients.ts

Lines changed: 8 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -68,31 +68,22 @@ export class ServicesClient {
6868
}
6969

7070
private _updateSourceDestinationSettings() {
71-
if (
72-
this._currentTeamProperties.team === null ||
73-
this._secondaryTeamProperties.length === 0
74-
) {
71+
if (this._currentTeamProperties.team === null || this._secondaryTeamProperties.length === 0) {
7572
return;
7673
}
77-
7874
if (this._viewState === ViewState.CopySettingsToTeam) {
7975
this._sourceTeamSettings = this._currentTeamProperties.settings;
8076
this._destinationTeamSettings = [];
8177
this._secondaryTeamProperties.forEach((secTeam) => {
8278
this._destinationTeamSettings.push(secTeam.settings);
8379
});
84-
this._currentMappings = this.getTeamColumnDifferences(
85-
this._sourceTeamSettings,
86-
this._destinationTeamSettings[0]
87-
);
80+
this._currentMappings = this.getTeamColumnDifferences(this._sourceTeamSettings, this._destinationTeamSettings[0]);
81+
8882
} else if (this._viewState === ViewState.CopySettingsFromTeam) {
8983
this._sourceTeamSettings = this._secondaryTeamProperties[0].settings;
9084
this._destinationTeamSettings = [];
9185
this._destinationTeamSettings.push(this._currentTeamProperties.settings);
92-
this._currentMappings = this.getTeamColumnDifferences(
93-
this._sourceTeamSettings,
94-
this._destinationTeamSettings[0]
95-
);
86+
this._currentMappings = this.getTeamColumnDifferences(this._sourceTeamSettings, this._destinationTeamSettings[0]);
9687
}
9788
}
9889

@@ -125,10 +116,7 @@ export class ServicesClient {
125116
return this._currentBacklogLevel;
126117
}
127118

128-
public async loadSelectedTeam(
129-
teamName: string,
130-
isMultiselect: boolean = false
131-
): Promise<void> {
119+
public async loadSelectedTeam(teamName: string, isMultiselect: boolean = false): Promise<void> {
132120
let team = await this.getTeam(teamName);
133121
let context = await this.getContextForTeamAsync(teamName);
134122
let settings = await this.getTeamSettingsAsync(context);
@@ -445,9 +433,7 @@ export class ServicesClient {
445433
}
446434

447435
// public async applyTeamSettingsAsync(oldSettings: Models.IBoardSettings, settingsToApply: Models.IBoardSettings, selectedMappings: Models.IBoardColumnDifferences[], selectedBacklogLevels: string[]): Promise<Boolean> {
448-
public async applyTeamSettingsAsync(
449-
selectedBacklogLevels: string[]
450-
): Promise<Boolean> {
436+
public async applyTeamSettingsAsync(selectedBacklogLevels: string[]): Promise<Boolean> {
451437
let result: Boolean = false;
452438
let wrc = getClient(WorkRestClient);
453439
let witrc = getClient(WorkItemTrackingRestClient);
@@ -468,11 +454,8 @@ export class ServicesClient {
468454
backlogIndex < this._sourceTeamSettings.backlogSettings.length;
469455
backlogIndex++
470456
) {
471-
let backlogSettingToApply =
472-
this._sourceTeamSettings.backlogSettings[backlogIndex];
473-
if (
474-
selectedBacklogLevels.indexOf(backlogSettingToApply.boardName) < 0
475-
) {
457+
let backlogSettingToApply = this._sourceTeamSettings.backlogSettings[backlogIndex];
458+
if (selectedBacklogLevels.indexOf(backlogSettingToApply.boardName) < 0) {
476459
continue;
477460
}
478461
console.log(`Processing backlog [${backlogSettingToApply.boardName}]`);

webpack.base.config.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
const path = require("path");
2+
const webpack = require("webpack");
23
const CopyWebpackPlugin = require("copy-webpack-plugin");
34

45
module.exports = {

webpack.config.js

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,12 @@
1-
module.exports = function(env) {
2-
return require(`./webpack.${env}.config`);
1+
const webpack = require("webpack");
2+
3+
module.exports = function (env) {
4+
5+
if (!env.dev) {
6+
return require(`./webpack.prod.config`);
7+
}
8+
else {
9+
return require(`./webpack.dev.config`);
10+
}
11+
312
};

0 commit comments

Comments
 (0)