提交 bb1e4a33 编写于 作者: P Piotr Bryk

Resource card framework: add status and selecion info (#660)

Re #630
上级 4ff81fff
...@@ -16,7 +16,11 @@ limitations under the License. ...@@ -16,7 +16,11 @@ limitations under the License.
<div class="kd-resource-card" layout="column"> <div class="kd-resource-card" layout="column">
<div layout="row" class="kd-resource-card-columns-container" flex="grow"> <div layout="row" class="kd-resource-card-columns-container" flex="grow">
<ng-transclude ng-transclude-slot="status" class="kd-resource-card-status" flex="none"> <div ng-if="$ctrl.isSelectable()" flex="none" class="kd-resource-card-select">
<md-checkbox></md-checkbox>
</div>
<ng-transclude ng-if="$ctrl.hasStatus()" ng-transclude-slot="status"
class="kd-resource-card-status" flex="none">
</ng-transclude> </ng-transclude>
<ng-transclude ng-transclude-slot="columns" class="kd-resource-card-columns-slot" flex="shrink"> <ng-transclude ng-transclude-slot="columns" class="kd-resource-card-columns-slot" flex="shrink">
</ng-transclude> </ng-transclude>
......
...@@ -17,10 +17,20 @@ ...@@ -17,10 +17,20 @@
$cell-base-size: 6 * $baseline-grid; $cell-base-size: 6 * $baseline-grid;
.kd-resource-card-status { .kd-resource-card-status {
align-items: center;
display: flex; display: flex;
margin-left: $baseline-grid; justify-content: center;
width: $cell-base-size; width: 4 * $baseline-grid;
}
.kd-resource-card-select {
display: flex;
justify-content: center;
padding-left: $baseline-grid;
width: 5 * $baseline-grid;
md-checkbox {
margin-bottom: 0;
}
} }
.kd-resource-card { .kd-resource-card {
...@@ -37,8 +47,3 @@ $cell-base-size: 6 * $baseline-grid; ...@@ -37,8 +47,3 @@ $cell-base-size: 6 * $baseline-grid;
.kd-resource-card-columns-slot { .kd-resource-card-columns-slot {
display: flex; display: flex;
} }
.kd-resource-card-footer-slot {
display: flex;
margin-left: $cell-base-size + 3 * $baseline-grid;
}
...@@ -26,7 +26,25 @@ export class ResourceCardController { ...@@ -26,7 +26,25 @@ export class ResourceCardController {
* @export {!backendApi.ResourceMetadata} * @export {!backendApi.ResourceMetadata}
*/ */
this.resourceMetadata; this.resourceMetadata;
/**
* Initialized from require just before $onInit is called.
* @export {!./resourcecardlist_component.ResourceCardListController}
*/
this.resourceCardListCtrl;
} }
/**
* @return {boolean}
* @export
*/
isSelectable() { return !!this.resourceCardListCtrl.selectable; }
/**
* @return {boolean}
* @export
*/
hasStatus() { return !!this.resourceCardListCtrl.withStatuses; }
} }
/** /**
...@@ -46,4 +64,7 @@ export const resourceCardComponent = { ...@@ -46,4 +64,7 @@ export const resourceCardComponent = {
'columns': '?kdResourceCardColumns', 'columns': '?kdResourceCardColumns',
'footer': '?kdResourceCardFooter', 'footer': '?kdResourceCardFooter',
}), }),
require: {
'resourceCardListCtrl': '^kdResourceCardList',
},
}; };
...@@ -18,7 +18,6 @@ kd-resource-card-column { ...@@ -18,7 +18,6 @@ kd-resource-card-column {
display: flex; display: flex;
flex-basis: auto; flex-basis: auto;
min-width: $baseline-grid * 10; min-width: $baseline-grid * 10;
overflow: hidden;
padding-left: 2 * $baseline-grid; padding-left: 2 * $baseline-grid;
// Add this class to kd-resource-card-column to make it layout its children in a row. // Add this class to kd-resource-card-column to make it layout its children in a row.
...@@ -29,6 +28,21 @@ kd-resource-card-column { ...@@ -29,6 +28,21 @@ kd-resource-card-column {
flex-direction: row; flex-direction: row;
} }
} }
// Add this class kd-resource-card-column to make it a compact column with icons.
&.kd-icon-column {
.md-button {
margin: 0;
}
}
&:not(:last-child) {
overflow: hidden;
}
&:first-child {
padding-left: $baseline-grid;
}
} }
.kd-resource-card-column-container { .kd-resource-card-column-container {
......
...@@ -15,5 +15,24 @@ ...@@ -15,5 +15,24 @@
@import '../../../variables'; @import '../../../variables';
.kd-resource-card-footer { .kd-resource-card-footer {
display: block; display: flex;
padding-left: $baseline-grid;
}
.kd-resource-card-list-selectable {
.kd-resource-card-footer {
padding-left: 6 * $baseline-grid;
}
&.kd-resource-card-list-with-statuses {
.kd-resource-card-footer {
padding-left: 10 * $baseline-grid;
}
}
}
.kd-resource-card-list-with-statuses {
.kd-resource-card-footer {
padding-left: 5 * $baseline-grid;
}
} }
...@@ -21,6 +21,10 @@ kd-resource-card-header-column { ...@@ -21,6 +21,10 @@ kd-resource-card-header-column {
min-width: $baseline-grid * 10; min-width: $baseline-grid * 10;
overflow: hidden; overflow: hidden;
padding-left: 2 * $baseline-grid; padding-left: 2 * $baseline-grid;
&:first-child {
padding-left: $baseline-grid;
}
} }
.kd-resource-card-header-column-container { .kd-resource-card-header-column-container {
......
...@@ -24,5 +24,22 @@ kd-resource-card-header-columns { ...@@ -24,5 +24,22 @@ kd-resource-card-header-columns {
color: $foreground-2; color: $foreground-2;
min-height: 4 * $baseline-grid; min-height: 4 * $baseline-grid;
padding: $baseline-grid; padding: $baseline-grid;
padding-left: 8 * $baseline-grid; }
.kd-resource-card-list-selectable {
.kd-resource-card-header-columns {
padding-left: 6 * $baseline-grid;
}
&.kd-resource-card-list-with-statuses {
.kd-resource-card-header-columns {
padding-left: 10 * $baseline-grid;
}
}
}
.kd-resource-card-list-with-statuses {
.kd-resource-card-header-columns {
padding-left: 5 * $baseline-grid;
}
} }
...@@ -14,4 +14,7 @@ See the License for the specific language governing permissions and ...@@ -14,4 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
--> -->
<div class="kd-resource-card-list" ng-transclude></div> <div class="kd-resource-card-list"
ng-class="{'kd-resource-card-list-selectable': $ctrl.selectable, 'kd-resource-card-list-with-statuses': $ctrl.withStatuses}"
ng-transclude>
</div>
...@@ -20,6 +20,20 @@ export class ResourceCardListController { ...@@ -20,6 +20,20 @@ export class ResourceCardListController {
* @ngInject * @ngInject
*/ */
constructor() { constructor() {
/**
* Whether to make list items selectable.
* Initialized from a bingind.
* @export {boolean|undefined}
*/
this.selectable;
/**
* Whether to make show statuses for list items.
* Initialized from a bingind.
* @export {boolean|undefined}
*/
this.withStatuses;
/** /**
* @private {!./resourcecardheadercolumns_component.ResourceCardHeaderColumnsController} * @private {!./resourcecardheadercolumns_component.ResourceCardHeaderColumnsController}
*/ */
...@@ -50,7 +64,7 @@ export class ResourceCardListController { ...@@ -50,7 +64,7 @@ export class ResourceCardListController {
* of header and body columns must be exactly the same. * of header and body columns must be exactly the same.
* *
* Sample usage: * Sample usage:
* <kd-resource-card-list> * <kd-resource-card-list selectable="true" with-statuses="true">
* <kd-resource-card-header-columns> * <kd-resource-card-header-columns>
* <kd-resource-card-header-column size="medium" grow="2"> * <kd-resource-card-header-column size="medium" grow="2">
* Name * Name
...@@ -86,4 +100,11 @@ export const resourceCardListComponent = { ...@@ -86,4 +100,11 @@ export const resourceCardListComponent = {
templateUrl: 'common/components/resourcecard/resourcecardlist.html', templateUrl: 'common/components/resourcecard/resourcecardlist.html',
transclude: true, transclude: true,
controller: ResourceCardListController, controller: ResourceCardListController,
bindings: {
/** {boolean|undefined} whether to make list items selectable */
'selectable': '<',
/** {boolean|undefined} whether to show statuses for list items */
'withStatuses': '<',
},
bindToController: true,
}; };
...@@ -31,7 +31,7 @@ describe('Resource card list', () => { ...@@ -31,7 +31,7 @@ describe('Resource card list', () => {
it('should fill the card layout', () => { it('should fill the card layout', () => {
let compileFn = compile(` let compileFn = compile(`
<kd-resource-card-list> <kd-resource-card-list selectable="selectable" with-statuses="withStatuses">
<kd-resource-card-header-columns> <kd-resource-card-header-columns>
<kd-resource-card-header-column size="small" grow="nogrow"> <kd-resource-card-header-column size="small" grow="nogrow">
NAME_COLUMN NAME_COLUMN
...@@ -88,7 +88,17 @@ describe('Resource card list', () => { ...@@ -88,7 +88,17 @@ describe('Resource card list', () => {
expect(elem.html()).toContain('FIRST_COLUMN2'); expect(elem.html()).toContain('FIRST_COLUMN2');
expect(elem.html()).toContain('SECOND_COLUMN2'); expect(elem.html()).toContain('SECOND_COLUMN2');
expect(elem.html()).toContain('THIRD_COLUMN2'); expect(elem.html()).toContain('THIRD_COLUMN2');
expect(elem.html()).toContain('STATUS'); expect(elem.html()).not.toContain('STATUS');
expect(elem.html()).toContain('FOOTER'); expect(elem.html()).toContain('FOOTER');
expect(elem.html()).not.toContain('md-checkbox');
scope.withStatuses = true;
scope.$digest();
expect(elem.html()).toContain('STATUS');
expect(elem.html()).not.toContain('md-checkbox');
scope.selectable = true;
scope.$digest();
expect(elem.html()).toContain('md-checkbox');
}); });
}); });
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册