Update to ADO c5a09dcbef2464ad2dbd6d8a5c70d4b8f105816c (#6)

This commit is contained in:
Steve Faulkner 2020-05-27 18:24:10 -05:00 committed by GitHub
parent f84cf0ad68
commit 7acb1faa4f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 178 additions and 164 deletions

View File

@ -163,6 +163,8 @@ export class ThroughputInputViewModel extends WaitsForTemplateViewModel {
public minAutoPilotThroughput: ko.Observable<number>; public minAutoPilotThroughput: ko.Observable<number>;
public overrideWithAutoPilotSettings: ko.Observable<boolean>; public overrideWithAutoPilotSettings: ko.Observable<boolean>;
public overrideWithProvisionedThroughputSettings: ko.Observable<boolean>; public overrideWithProvisionedThroughputSettings: ko.Observable<boolean>;
public isManualThroughputInputFieldRequired: ko.Computed<boolean>;
public isAutoscaleThroughputInputFieldRequired: ko.Computed<boolean>;
public constructor(options: ThroughputInputParams) { public constructor(options: ThroughputInputParams) {
super(); super();
@ -213,6 +215,10 @@ export class ThroughputInputViewModel extends WaitsForTemplateViewModel {
}); });
this.decreaseButtonAriaLabel = "Decrease throughput by " + this.step().toString(); this.decreaseButtonAriaLabel = "Decrease throughput by " + this.step().toString();
this.increaseButtonAriaLabel = "Increase throughput by " + this.step().toString(); this.increaseButtonAriaLabel = "Increase throughput by " + this.step().toString();
this.isManualThroughputInputFieldRequired = ko.pureComputed(() => this.isEnabled() && !this.isAutoPilotSelected());
this.isAutoscaleThroughputInputFieldRequired = ko.pureComputed(
() => this.isEnabled() && this.isAutoPilotSelected()
);
} }
public decreaseThroughput() { public decreaseThroughput() {

View File

@ -77,12 +77,21 @@
<p> <p>
<span>Max RU/s</span> <span>Max RU/s</span>
</p> </p>
<input <div data-bind="setTemplateReady: true">
type="number" <input
data-bind="textInput: overrideWithProvisionedThroughputSettings() ? '' : maxAutoPilotThroughputSet, attr:{disabled: overrideWithProvisionedThroughputSettings(), step: step, 'class':'migration collid select-font-size', min: minAutoPilotThroughput, css: { data-bind="textInput: overrideWithProvisionedThroughputSettings() ? '' : maxAutoPilotThroughputSet, attr:{
disabled: overrideWithProvisionedThroughputSettings(),
step: step,
'class':'migration collid select-font-size',
min: minAutoPilotThroughput,
'aria-label': ariaLabel,
type: isAutoscaleThroughputInputFieldRequired() ? 'number' : 'hidden',
css: {
dirty: maxAutoPilotThroughputSet.editableIsDirty dirty: maxAutoPilotThroughputSet.editableIsDirty
}}" }
/> }"
/>
</div>
<p data-bind="visible: overrideWithProvisionedThroughputSettings && !overrideWithProvisionedThroughputSettings()"> <p data-bind="visible: overrideWithProvisionedThroughputSettings && !overrideWithProvisionedThroughputSettings()">
<span <span
data-bind=" data-bind="
@ -114,27 +123,25 @@
<div data-bind="visible: !isAutoPilotSelected()"> <div data-bind="visible: !isAutoPilotSelected()">
<div data-bind="setTemplateReady: true"> <div data-bind="setTemplateReady: true">
<p class="addContainerThroughputInput"> <input
<input data-bind="
type="number"
required
data-bind="
textInput: overrideWithAutoPilotSettings() ? maxAutoPilotThroughputSet : value, textInput: overrideWithAutoPilotSettings() ? maxAutoPilotThroughputSet : value,
css: { css: {
dirty: value.editableIsDirty dirty: value.editableIsDirty
}, },
enable: isEnabled, enable: isEnabled,
attr:{ attr:{
type: isManualThroughputInputFieldRequired() ? 'number' : 'hidden',
'data-test': testId, 'data-test': testId,
'class': cssClass, 'class': cssClass,
step: step, step: step,
min: minimum, min: minimum,
max: canExceedMaximumValue() ? null : maximum, max: canExceedMaximumValue() ? null : maximum,
'aria-label': ariaLabel, 'aria-label': ariaLabel,
disabled: overrideWithAutoPilotSettings() disabled: overrideWithAutoPilotSettings(),
required: isManualThroughputInputFieldRequired()
}" }"
/> />
</p>
</div> </div>
<p data-bind="visible: costsVisible"> <p data-bind="visible: costsVisible">

View File

@ -22,7 +22,7 @@
</div> </div>
<script type="text/html" id="add-collection-inputs"> <script type="text/html" id="add-collection-inputs">
<!-- Add collection header - Start --> <!-- Add collection header - Start -->
<div class="firstdivbg headerline"> <div class="firstdivbg headerline">
<span id="containerTitle" data-bind="text: title"></span> <span id="containerTitle" data-bind="text: title"></span>
<div class="closeImg" id="closeBtnAddCollection" role="button" aria-label="Close pane" <div class="closeImg" id="closeBtnAddCollection" role="button" aria-label="Close pane"
@ -130,30 +130,30 @@
<div data-bind="visible: databaseCreateNewShared() && databaseCreateNew()"> <div data-bind="visible: databaseCreateNewShared() && databaseCreateNew()">
<!-- 1 --> <!-- 1 -->
<throughput-input-autopilot-v3 params="{ <throughput-input-autopilot-v3 params="{
testId: 'databaseThroughputValue', testId: 'databaseThroughputValue',
value: throughputDatabase, value: throughputDatabase,
minimum: minThroughputRU, minimum: minThroughputRU,
maximum: maxThroughputRU, maximum: maxThroughputRU,
isEnabled: databaseCreateNewShared, isEnabled: databaseCreateNewShared() && databaseCreateNew(),
label: sharedThroughputRangeText, label: sharedThroughputRangeText,
ariaLabel: sharedThroughputRangeText, ariaLabel: sharedThroughputRangeText,
costsVisible: costsVisible, costsVisible: costsVisible,
requestUnitsUsageCost: requestUnitsUsageCost, requestUnitsUsageCost: requestUnitsUsageCost,
spendAckChecked: throughputSpendAck, spendAckChecked: throughputSpendAck,
spendAckId: 'throughputSpendAck', spendAckId: 'throughputSpendAck',
spendAckText: throughputSpendAckText, spendAckText: throughputSpendAckText,
spendAckVisible: throughputSpendAckVisible, spendAckVisible: throughputSpendAckVisible,
showAsMandatory: true, showAsMandatory: true,
infoBubbleText: ruToolTipText, infoBubbleText: ruToolTipText,
throughputAutoPilotRadioId: 'newContainer-databaseThroughput-autoPilotRadio', throughputAutoPilotRadioId: 'newContainer-databaseThroughput-autoPilotRadio',
throughputProvisionedRadioId: 'newContainer-databaseThroughput-manualRadio', throughputProvisionedRadioId: 'newContainer-databaseThroughput-manualRadio',
throughputModeRadioName: 'sharedThroughputModeRadio', throughputModeRadioName: 'sharedThroughputModeRadio',
isAutoPilotSelected: isSharedAutoPilotSelected, isAutoPilotSelected: isSharedAutoPilotSelected,
maxAutoPilotThroughputSet: sharedAutoPilotThroughput, maxAutoPilotThroughputSet: sharedAutoPilotThroughput,
autoPilotUsageCost: autoPilotUsageCost, autoPilotUsageCost: autoPilotUsageCost,
canExceedMaximumValue: canExceedMaximumValue, canExceedMaximumValue: canExceedMaximumValue,
showAutoPilot: !isFreeTierAccount() showAutoPilot: !isFreeTierAccount()
}"> }">
</throughput-input-autopilot-v3> </throughput-input-autopilot-v3>
</div> </div>
<!-- /ko --> <!-- /ko -->
@ -161,30 +161,30 @@
<div data-bind="visible: databaseCreateNewShared() && databaseCreateNew()"> <div data-bind="visible: databaseCreateNewShared() && databaseCreateNew()">
<!-- 1 --> <!-- 1 -->
<throughput-input params="{ <throughput-input params="{
testId: 'databaseThroughputValue', testId: 'databaseThroughputValue',
value: throughputDatabase, value: throughputDatabase,
minimum: minThroughputRU, minimum: minThroughputRU,
maximum: maxThroughputRU, maximum: maxThroughputRU,
isEnabled: databaseCreateNewShared, isEnabled: databaseCreateNewShared() && databaseCreateNew(),
label: sharedThroughputRangeText, label: sharedThroughputRangeText,
ariaLabel: sharedThroughputRangeText, ariaLabel: sharedThroughputRangeText,
costsVisible: costsVisible, costsVisible: costsVisible,
requestUnitsUsageCost: requestUnitsUsageCost, requestUnitsUsageCost: requestUnitsUsageCost,
spendAckChecked: throughputSpendAck, spendAckChecked: throughputSpendAck,
spendAckId: 'throughputSpendAck', spendAckId: 'throughputSpendAck',
spendAckText: throughputSpendAckText, spendAckText: throughputSpendAckText,
spendAckVisible: throughputSpendAckVisible, spendAckVisible: throughputSpendAckVisible,
showAsMandatory: true, showAsMandatory: true,
infoBubbleText: ruToolTipText, infoBubbleText: ruToolTipText,
throughputAutoPilotRadioId: 'newContainer-databaseThroughput-autoPilotRadio', throughputAutoPilotRadioId: 'newContainer-databaseThroughput-autoPilotRadio',
throughputProvisionedRadioId: 'newContainer-databaseThroughput-manualRadio', throughputProvisionedRadioId: 'newContainer-databaseThroughput-manualRadio',
throughputModeRadioName: 'sharedThroughputModeRadio', throughputModeRadioName: 'sharedThroughputModeRadio',
isAutoPilotSelected: isSharedAutoPilotSelected, isAutoPilotSelected: isSharedAutoPilotSelected,
autoPilotUsageCost: autoPilotUsageCost, autoPilotUsageCost: autoPilotUsageCost,
canExceedMaximumValue: canExceedMaximumValue, canExceedMaximumValue: canExceedMaximumValue,
autoPilotTiersList: sharedAutoPilotTiersList, autoPilotTiersList: sharedAutoPilotTiersList,
selectedAutoPilotTier: selectedSharedAutoPilotTier selectedAutoPilotTier: selectedSharedAutoPilotTier
}"> }">
</throughput-input> </throughput-input>
</div> </div>
<!-- /ko --> <!-- /ko -->
@ -210,17 +210,17 @@
</div> </div>
<!-- <p class="seconddivpadding" data-bind="visible:(container.isPreferredApiDocumentDB() || container.isPreferredApiGraph()) && !databaseHasSharedOffer()"> <!-- <p class="seconddivpadding" data-bind="visible:(container.isPreferredApiDocumentDB() || container.isPreferredApiGraph()) && !databaseHasSharedOffer()">
Where did 'fixed' containers go? Where did 'fixed' containers go?
<span class="infoTooltip" role="tooltip" tabindex="0"> <span class="infoTooltip" role="tooltip" tabindex="0">
<img class="infoImg" src="/info-bubble.svg" alt="More information"> <img class="infoImg" src="/info-bubble.svg" alt="More information">
<span class="tooltiptext noFixedCollectionsTooltipWidth"> <span class="tooltiptext noFixedCollectionsTooltipWidth">
We lowered the minimum throughput for partitioned containers to 400 RU/s, removing the only drawback partitioned containers had. <br/><br/> We lowered the minimum throughput for partitioned containers to 400 RU/s, removing the only drawback partitioned containers had. <br/><br/>
We are planning to deprecate ability to create non-partitioned containers, as they do not allow you to scale elastically. We are planning to deprecate ability to create non-partitioned containers, as they do not allow you to scale elastically.
If for some reason you still need a container without partition key, you can use our SDKs to create one. <br/><br/> If for some reason you still need a container without partition key, you can use our SDKs to create one. <br/><br/>
Please <a href="https://aka.ms/cosmosdbfeedback?subject=Cosmos%20DB%20Hosted%20Data%20Explorer%20Feedback">contact us</a> if you have questions or concerns. Please <a href="https://aka.ms/cosmosdbfeedback?subject=Cosmos%20DB%20Hosted%20Data%20Explorer%20Feedback">contact us</a> if you have questions or concerns.
</span> </span>
</span> </span>
</p> --> </p> -->
<!-- Indexing For Shared Throughput - start --> <!-- Indexing For Shared Throughput - start -->
<div class="seconddivpadding" <div class="seconddivpadding"
@ -289,21 +289,22 @@
<!-- Fixed Button Content - Start --> <!-- Fixed Button Content - Start -->
<div class="tabcontent" data-bind="visible: isFixedStorageSelected() && !databaseHasSharedOffer()"> <div class="tabcontent" data-bind="visible: isFixedStorageSelected() && !databaseHasSharedOffer()">
<!-- 2 --> <!-- 2 -->
<!-- note: this is used when creating a fixed collection without shared throughput. only manual throughput is available. -->
<throughput-input params="{ <throughput-input params="{
testId: 'fixedThroughputValue', testId: 'fixedThroughputValue',
value: throughputSinglePartition, value: throughputSinglePartition,
minimum: minThroughputRU, minimum: minThroughputRU,
maximum: maxThroughputRU, maximum: maxThroughputRU,
isEnabled: isFixedStorageSelected() && !databaseHasSharedOffer(), isEnabled: isFixedStorageSelected() && !databaseHasSharedOffer(),
label: throughputRangeText, label: throughputRangeText,
ariaLabel: throughputRangeText, ariaLabel: throughputRangeText,
costsVisible: costsVisible, costsVisible: costsVisible,
requestUnitsUsageCost: requestUnitsUsageCost requestUnitsUsageCost: requestUnitsUsageCost
showAsMandatory: true, showAsMandatory: true,
isFixed: true, isFixed: true,
infoBubbleText: ruToolTipText, infoBubbleText: ruToolTipText,
canExceedMaximumValue: canExceedMaximumValue canExceedMaximumValue: canExceedMaximumValue
}"> }">
</throughput-input> </throughput-input>
<div data-bind="visible: rupmVisible"> <div data-bind="visible: rupmVisible">
<div class="tabs"> <div class="tabs">
@ -389,13 +390,13 @@
</p> </p>
<input type="text" data-test="addCollection-partitionKeyValue" aria-required="true" size="40" <input type="text" data-test="addCollection-partitionKeyValue" aria-required="true" size="40"
class="textfontclr collid" data-bind="textInput: partitionKey, class="textfontclr collid" data-bind="textInput: partitionKey,
attr: { attr: {
placeholder: partitionKeyPlaceholder, placeholder: partitionKeyPlaceholder,
required: partitionKeyVisible(), required: partitionKeyVisible(),
'aria-label': partitionKeyName, 'aria-label': partitionKeyName,
pattern: partitionKeyPattern, pattern: partitionKeyPattern,
title: partitionKeyTitle title: partitionKeyTitle
}"> }">
</div> </div>
<!-- large parition key - start --> <!-- large parition key - start -->
<div class="largePartitionKey" aria-label="Large Partition Key" data-bind="visible: partitionKeyVisible"> <div class="largePartitionKey" aria-label="Large Partition Key" data-bind="visible: partitionKeyVisible">
@ -440,30 +441,30 @@
<div data-bind="visible: displayCollectionThroughput" data-test="addCollection-displayCollectionThroughput"> <div data-bind="visible: displayCollectionThroughput" data-test="addCollection-displayCollectionThroughput">
<!-- 3 --> <!-- 3 -->
<throughput-input-autopilot-v3 params="{ <throughput-input-autopilot-v3 params="{
testId: 'collectionThroughputValue', testId: 'collectionThroughputValue',
value: throughputMultiPartition, value: throughputMultiPartition,
minimum: minThroughputRU, minimum: minThroughputRU,
maximum: maxThroughputRU, maximum: maxThroughputRU,
isEnabled: !databaseHasSharedOffer() || collectionWithThroughputInShared(), isEnabled: displayCollectionThroughput,
label: throughputRangeText, label: throughputRangeText,
ariaLabel: throughputRangeText, ariaLabel: throughputRangeText,
costsVisible: costsVisible, costsVisible: costsVisible,
requestUnitsUsageCost: dedicatedRequestUnitsUsageCost, requestUnitsUsageCost: dedicatedRequestUnitsUsageCost,
spendAckChecked: throughputSpendAck, spendAckChecked: throughputSpendAck,
spendAckId: 'throughputSpendAckCollection', spendAckId: 'throughputSpendAckCollection',
spendAckText: throughputSpendAckText, spendAckText: throughputSpendAckText,
spendAckVisible: throughputSpendAckVisible, spendAckVisible: throughputSpendAckVisible,
showAsMandatory: true, showAsMandatory: true,
infoBubbleText: ruToolTipText, infoBubbleText: ruToolTipText,
throughputAutoPilotRadioId: 'newContainer-containerThroughput-autoPilotRadio', throughputAutoPilotRadioId: 'newContainer-containerThroughput-autoPilotRadio',
throughputProvisionedRadioId: 'newContainer-containerThroughput-manualRadio', throughputProvisionedRadioId: 'newContainer-containerThroughput-manualRadio',
throughputModeRadioName: 'throughputModeRadioName', throughputModeRadioName: 'throughputModeRadioName',
isAutoPilotSelected: isAutoPilotSelected, isAutoPilotSelected: isAutoPilotSelected,
maxAutoPilotThroughputSet: autoPilotThroughput, maxAutoPilotThroughputSet: autoPilotThroughput,
autoPilotUsageCost: autoPilotUsageCost, autoPilotUsageCost: autoPilotUsageCost,
canExceedMaximumValue: canExceedMaximumValue, canExceedMaximumValue: canExceedMaximumValue,
showAutoPilot: !isFixedStorageSelected() showAutoPilot: !isFixedStorageSelected()
}"> }">
</throughput-input-autopilot-v3> </throughput-input-autopilot-v3>
</div> </div>
<!-- /ko --> <!-- /ko -->
@ -471,31 +472,31 @@
<div data-bind="visible: displayCollectionThroughput" data-test="addCollection-displayCollectionThroughput"> <div data-bind="visible: displayCollectionThroughput" data-test="addCollection-displayCollectionThroughput">
<!-- 3 --> <!-- 3 -->
<throughput-input params="{ <throughput-input params="{
testId: 'collectionThroughputValue', testId: 'collectionThroughputValue',
value: throughputMultiPartition, value: throughputMultiPartition,
minimum: minThroughputRU, minimum: minThroughputRU,
maximum: maxThroughputRU, maximum: maxThroughputRU,
isEnabled: !databaseHasSharedOffer() || collectionWithThroughputInShared(), isEnabled: displayCollectionThroughput,
label: throughputRangeText, label: throughputRangeText,
ariaLabel: throughputRangeText, ariaLabel: throughputRangeText,
costsVisible: costsVisible, costsVisible: costsVisible,
requestUnitsUsageCost: dedicatedRequestUnitsUsageCost, requestUnitsUsageCost: dedicatedRequestUnitsUsageCost,
spendAckChecked: throughputSpendAck, spendAckChecked: throughputSpendAck,
spendAckId: 'throughputSpendAckCollection', spendAckId: 'throughputSpendAckCollection',
spendAckText: throughputSpendAckText, spendAckText: throughputSpendAckText,
spendAckVisible: throughputSpendAckVisible, spendAckVisible: throughputSpendAckVisible,
showAsMandatory: true, showAsMandatory: true,
infoBubbleText: ruToolTipText, infoBubbleText: ruToolTipText,
throughputAutoPilotRadioId: 'newContainer-containerThroughput-autoPilotRadio', throughputAutoPilotRadioId: 'newContainer-containerThroughput-autoPilotRadio',
throughputProvisionedRadioId: 'newContainer-containerThroughput-manualRadio', throughputProvisionedRadioId: 'newContainer-containerThroughput-manualRadio',
throughputModeRadioName: 'throughputModeRadioName', throughputModeRadioName: 'throughputModeRadioName',
isAutoPilotSelected: isAutoPilotSelected, isAutoPilotSelected: isAutoPilotSelected,
autoPilotUsageCost: autoPilotUsageCost, autoPilotUsageCost: autoPilotUsageCost,
canExceedMaximumValue: canExceedMaximumValue, canExceedMaximumValue: canExceedMaximumValue,
autoPilotTiersList: autoPilotTiersList, autoPilotTiersList: autoPilotTiersList,
selectedAutoPilotTier: selectedAutoPilotTier, selectedAutoPilotTier: selectedAutoPilotTier,
showAutoPilot: !isFixedStorageSelected() showAutoPilot: !isFixedStorageSelected()
}"> }">
</throughput-input> </throughput-input>
</div> </div>
<!-- /ko --> <!-- /ko -->
@ -521,24 +522,24 @@
<div class="paragraph"> <div class="paragraph">
<input class="enableAnalyticalStorageRadio" id="enableAnalyticalStorageRadioOn" <input class="enableAnalyticalStorageRadio" id="enableAnalyticalStorageRadioOn"
name="analyticalStore" type="radio" role="radio" tabindex="0" data-bind=" name="analyticalStore" type="radio" role="radio" tabindex="0" data-bind="
disable: showEnableSynapseLink, disable: showEnableSynapseLink,
checked: isAnalyticalStorageOn, checked: isAnalyticalStorageOn,
checkedValue: true, checkedValue: true,
attr: { attr: {
'aria-checked': isAnalyticalStorageOn() ? 'true' : 'false' 'aria-checked': isAnalyticalStorageOn() ? 'true' : 'false'
}" /> }" />
<span for="enableAnalyticalStorageRadioOn" data-bind="disable: showEnableSynapseLink"> <span for="enableAnalyticalStorageRadioOn" data-bind="disable: showEnableSynapseLink">
On On
</span> </span>
<input class="enableAnalyticalStorageRadio" id="enableAnalyticalStorageRadioOff" <input class="enableAnalyticalStorageRadio" id="enableAnalyticalStorageRadioOff"
name="analyticalStore" type="radio" role="radio" tabindex="0" data-bind=" name="analyticalStore" type="radio" role="radio" tabindex="0" data-bind="
disable: showEnableSynapseLink, disable: showEnableSynapseLink,
checked: isAnalyticalStorageOn, checked: isAnalyticalStorageOn,
checkedValue: false, checkedValue: false,
attr: { attr: {
'aria-checked': isAnalyticalStorageOn() ? 'false' : 'true' 'aria-checked': isAnalyticalStorageOn() ? 'false' : 'true'
}" /> }" />
<span for="enableAnalyticalStorageRadioOff" data-bind="disable: showEnableSynapseLink"> <span for="enableAnalyticalStorageRadioOff" data-bind="disable: showEnableSynapseLink">
Off Off
</span> </span>
@ -561,13 +562,13 @@
<div class="paragraph" data-bind="visible: showEnableSynapseLink"> <div class="paragraph" data-bind="visible: showEnableSynapseLink">
<button class="button" type="button" data-bind=" <button class="button" type="button" data-bind="
click: onEnableSynapseLinkButtonClicked, click: onEnableSynapseLinkButtonClicked,
disable: isSynapseLinkUpdating, disable: isSynapseLinkUpdating,
css: { css: {
enabled: !isSynapseLinkUpdating(), enabled: !isSynapseLinkUpdating(),
disabled: isSynapseLinkUpdating disabled: isSynapseLinkUpdating
} }
">Enable</button> ">Enable</button>
</div> </div>
</div> </div>
<!-- Enable analytical storage - end --> <!-- Enable analytical storage - end -->

View File

@ -148,7 +148,7 @@
value: keyspaceThroughput, value: keyspaceThroughput,
minimum: minThroughputRU, minimum: minThroughputRU,
maximum: maxThroughputRU, maximum: maxThroughputRU,
isEnabled: keyspaceHasSharedOffer, isEnabled: keyspaceCreateNew() && keyspaceHasSharedOffer(),
label: sharedThroughputRangeText, label: sharedThroughputRangeText,
ariaLabel: sharedThroughputRangeText, ariaLabel: sharedThroughputRangeText,
requestUnitsUsageCost: requestUnitsUsageCostShared, requestUnitsUsageCost: requestUnitsUsageCostShared,
@ -179,7 +179,7 @@
value: keyspaceThroughput, value: keyspaceThroughput,
minimum: minThroughputRU, minimum: minThroughputRU,
maximum: maxThroughputRU, maximum: maxThroughputRU,
isEnabled: keyspaceHasSharedOffer, isEnabled: keyspaceCreateNew() && keyspaceHasSharedOffer(),
label: sharedThroughputRangeText, label: sharedThroughputRangeText,
ariaLabel: sharedThroughputRangeText, ariaLabel: sharedThroughputRangeText,
requestUnitsUsageCost: requestUnitsUsageCostShared, requestUnitsUsageCost: requestUnitsUsageCostShared,